aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Bergman <[email protected]>2014-02-17 21:05:35 -0500
committerMatthew Bergman <[email protected]>2014-02-17 21:05:35 -0500
commit7710092ab44ce820dc73799193badee4e5ebce0c (patch)
treef5a369600fe0c1f7e675d1eff58ba38ff39da07a
parent934945d9ca59f197b9e8971d8d428ad9dd86d419 (diff)
parent47527ec7391b15f915b25e983da80e98360ed04a (diff)
downloadfaker-7710092ab44ce820dc73799193badee4e5ebce0c.tar.xz
faker-7710092ab44ce820dc73799193badee4e5ebce0c.zip
Merge pull request #1 from Marak/master
Merging Upstream into master branch
-rw-r--r--.gitignore1
-rw-r--r--.jshintignore3
-rw-r--r--.jshintrc87
-rw-r--r--.travis.yml5
-rwxr-xr-x[-rw-r--r--]BUILD/BUILD.js156
-rw-r--r--BUILD/docs.js10
-rw-r--r--BUILD/main.js4
-rw-r--r--Faker.js815
-rw-r--r--Makefile26
-rw-r--r--MinFaker.js30
-rw-r--r--Readme.md10
-rw-r--r--examples/browser_test.html (renamed from tests/browser_test.html)0
-rw-r--r--examples/js/Faker.js815
-rw-r--r--examples/library_test.js (renamed from tests/library_test.js)0
-rwxr-xr-x[-rw-r--r--]examples/node_min_test.js (renamed from tests/node_min_test.js)7
-rw-r--r--index.js4
-rw-r--r--lib/address.js159
-rw-r--r--lib/company.js55
-rw-r--r--lib/definitions.js220
-rw-r--r--lib/helpers.js206
-rw-r--r--lib/image.js68
-rw-r--r--lib/internet.js66
-rw-r--r--lib/lorem.js65
-rw-r--r--lib/name.js56
-rw-r--r--lib/phone_number.js16
-rw-r--r--lib/random.js101
-rw-r--r--package.json21
-rw-r--r--test/address.unit.js293
-rw-r--r--test/all.functional.js47
-rw-r--r--test/browser.unit.html28
-rw-r--r--test/company.unit.js110
-rw-r--r--test/helpers.unit.js62
-rw-r--r--test/image.unit.js38
-rw-r--r--test/internet.unit.js85
-rw-r--r--test/lorem.unit.js178
-rw-r--r--test/mocha.opts5
-rw-r--r--test/name.unit.js63
-rw-r--r--test/phone_number.unit.js29
-rwxr-xr-xtest/run.js68
-rw-r--r--test/support/chai.js3403
-rw-r--r--test/support/sinon-1.5.2.js4153
-rw-r--r--test/support/walk_dir.js43
42 files changed, 10346 insertions, 1265 deletions
diff --git a/.gitignore b/.gitignore
index 0b6837bf..62024b05 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@ REVISION
lib-cov
node_modules/
/npm-debug.log
+/coverage
diff --git a/.jshintignore b/.jshintignore
new file mode 100644
index 00000000..c6b045a5
--- /dev/null
+++ b/.jshintignore
@@ -0,0 +1,3 @@
+lib/definitions.js
+lib/version.js
+lib/helpers.js
diff --git a/.jshintrc b/.jshintrc
new file mode 100644
index 00000000..1f120860
--- /dev/null
+++ b/.jshintrc
@@ -0,0 +1,87 @@
+{
+ // Settings
+ "passfail" : false, // Stop on first error.
+ "maxerr" : 500, // Maximum errors before stopping.
+ "multistr" : true,
+
+
+ // Predefined globals whom JSHint will ignore.
+ "browser" : true, // Standard browser globals e.g. `window`, `document`.
+
+ "node" : false,
+ "rhino" : false,
+ "couch" : false,
+ "wsh" : true, // Windows Scripting Host.
+
+ "jquery" : true,
+ "prototypejs" : false,
+ "mootools" : false,
+ "dojo" : false,
+
+ "predef" : [ // Extra globals.
+ "__dirname",
+ "Buffer",
+ "event",
+ "exports",
+ "global",
+ "logger",
+ "module",
+ "process",
+ "require",
+
+ "after",
+ "afterEach",
+ "before",
+ "beforeEach",
+ "context",
+ "describe",
+ "it"
+ ],
+
+ // Development.
+ "debug" : false, // Allow debugger statements e.g. browser breakpoints.
+ "devel" : true, // Allow development statements e.g. `console.log();`.
+
+
+ // EcmaScript 5.
+ "es5" : false, // Allow EcmaScript 5 syntax.
+ "strict" : false, // Require `use strict` pragma in every file.
+ "globalstrict" : false, // Allow global "use strict" (also enables 'strict').
+
+
+ "asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons).
+ "laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons.
+ "bitwise" : true, // Prohibit bitwise operators (&, |, ^, etc.).
+ "boss" : false, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments.
+ "curly" : true, // Require {} for every new block or scope.
+ "eqeqeq" : false, // Require triple equals i.e. `===`.
+ "eqnull" : false, // Tolerate use of `== null`.
+ "evil" : false, // Tolerate use of `eval`.
+ "expr" : false, // Tolerate `ExpressionStatement` as Programs.
+ "forin" : false, // Tolerate `for in` loops without `hasOwnProperty`.
+ "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );`
+ "latedef" : true, // Prohibit variable use before definition.
+ "loopfunc" : true, // Allow functions to be defined within loops.
+ //"maxparams" : 4,
+ //"maxdepth" : 5,
+ //"maxcomplexity" : 10,
+ "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`.
+ "regexp" : false, // Prohibit `.` and `[^...]` in regular expressions.
+ "regexdash" : false, // Tolerate unescaped last dash i.e. `[-...]`.
+ "scripturl" : true, // Tolerate script-targeted URLs.
+ "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`.
+ "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`.
+ "undef" : true, // Require all non-global variables be declared before they are used.
+
+
+ "newcap" : false, // Require capitalization of all constructor functions e.g. `new F()`.
+ "noempty" : true, // Prohibit use of empty blocks.
+ "nonew" : false, // Prohibit use of constructors for side-effects.
+ "nomen" : false, // Prohibit use of initial or trailing underbars in names.
+ "onevar" : false, // Allow only one `var` statement per function.
+ "plusplus" : false, // Prohibit use of `++` & `--`.
+ "sub" : true, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`.
+ "trailing" : true, // Prohibit trailing whitespaces. (only works if white is 'true')
+ "white" : true, // Check against strict whitespace and indentation rules.
+ "indent" : 4 //
+}
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 00000000..1cbca686
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+
+node_js:
+ - 0.8
+ - 0.10
diff --git a/BUILD/BUILD.js b/BUILD/BUILD.js
index 2ee2abad..33b2cfdb 100644..100755
--- a/BUILD/BUILD.js
+++ b/BUILD/BUILD.js
@@ -1,8 +1,9 @@
-var sys = require('sys')
- , fs = require('fs')
- , M = require('./Mustache');
-
+#!/usr/bin/env node
+var sys = require('sys')
+ , fs = require('fs')
+ , M = require('./Mustache')
+ , compressor = require('node-minify');
var code = '';
@@ -12,93 +13,126 @@ docs.main = '';
docs.API = '';
// read in the the main.js file as our main boilerplate code
-code += fs.readFileSync('./main.js', encoding='utf8');
-code = M.Mustache.to_html(code, {"today":new Date().getTime()});
+code += fs.readFileSync('./main.js', encoding = 'utf8');
+code = M.Mustache.to_html(code, {"today": new Date().getTime()});
-docs.main += fs.readFileSync('./docs.js', encoding='utf8');
+docs.main += fs.readFileSync('./docs.js', encoding = 'utf8');
// parse entire lib directory and concat it into one file for the browser
var lib = paths('./lib');
-
-var Faker= require('../index');
+var Faker = require('../index');
// generate bundle for code on the browser
-for(var module in Faker){
- code += ( '\n' + 'Faker.' + module + ' = {};');
- for(var method in Faker[module]){
- code += ( '\n' + 'Faker.' + module);
- code += ( '.' + method + ' = ');
- code += (Faker[module][method].toString() + ';\n');
- }
+for (var module in Faker) {
+ code += ( '\n' + 'Faker.' + module + ' = {};');
+ for (var method in Faker[module]) {
+ code += ( '\n' + 'Faker.' + module);
+ code += ( '.' + method + ' = ');
+
+ // serialize arrays as JSON, otherwise use simple string conversion
+ var methodValue = Faker[module][method];
+ if (Array.isArray(methodValue)) {
+ code += JSON.stringify(methodValue) + ';\n';
+ } else {
+ code += (methodValue.toString() + ';\n');
+ }
+ }
}
// generate nice tree of api for docs
docs.API += '<ul>';
-for(var module in Faker){
- docs.API += '<li>' + module;
- docs.API += '<ul>'
- for(var method in Faker[module]){
- docs.API += '<li>' + method + '</li>';
- }
- docs.API += '</ul>';
- docs.API += '</li>';
+for (var module in Faker) {
+ docs.API += '<li>' + module;
+ docs.API += '<ul>';
+ for (var method in Faker[module]) {
+ docs.API += '<li>' + method + '</li>';
+ }
+ docs.API += '</ul>';
+ docs.API += '</li>';
}
docs.API += '</ul>';
// definitions hack
-code += 'var definitions = Faker.definitions; \n';
-code += 'var Helpers = Faker.Helpers; \n';
+code += 'var definitions = Faker.definitions;\n';
+code += 'var Helpers = Faker.Helpers;\n';
-// exports hack for dual sided stuff
// if we are running in a CommonJS env, export everything out
-code += 'if(typeof exports != "undefined"){for(var prop in Faker){exports[prop] = Faker[prop];}}';
+code +=["\nif (typeof define == 'function'){",
+" define(function(){",
+" return Faker;",
+" });",
+"}",
+"else if(typeof module !== 'undefined' && module.exports) {",
+" module.exports = Faker;",
+"}",
+"else {",
+" window.Faker = Faker;",
+"}",
+"",
+"}()); // end Faker closure"].join('\n');
// generate core library
fs.writeFile('../Faker.js', code, function() {
- sys.puts("Faker.js generated successfully!");
+ sys.puts("Faker.js generated successfully!");
});
// generate example js file as well
fs.writeFile('../examples/js/Faker.js', code, function() {
- sys.puts("Faker.js generated successfully!");
+ sys.puts("Faker.js generated successfully!");
});
-
-var docOutput = M.Mustache.to_html(docs.main, {"API":docs.API});
+var docOutput = M.Mustache.to_html(docs.main, {"API": docs.API});
// generate some samples sets (move this code to another section)
fs.writeFile('../Readme.md', docOutput, function() {
- sys.puts("Docs generated successfully!");
+ sys.puts("Docs generated successfully!");
});
-/*********************** BUILD HELPER METHODS *********************/
+// generates minified version Using Google Closure
+new compressor.minify({
+ type: 'gcc',
+ fileIn: '../Faker.js',
+ fileOut: '../MinFaker.js',
+ callback: function(err){
+ if(err) {
+ console.log(err);
+ }
+ else sys.puts("Minified version generated successfully!");
+ }
+});
- // Recursively traverse a hierarchy, returning a list of all relevant .js files.
- function paths(dir) {
- var paths = [];
-
- try { fs.statSync(dir) }
- catch (e) { return e }
-
- (function traverse(dir, stack) {
- stack.push(dir);
- fs.readdirSync(stack.join('/')).forEach(function (file) {
- var path = stack.concat([file]).join('/'),
- stat = fs.statSync(path);
-
- if (file[0] == '.' || file === 'vendor') {
- return;
- } else if (stat.isFile() && /\.js$/.test(file)) {
- paths.push(path);
- } else if (stat.isDirectory()) {
- paths.push(path);
- traverse(file, stack);
- }
- });
- stack.pop();
- })(dir || '.', []);
-
- return paths;
- }
+/*********************** BUILD HELPER METHODS *********************/
+
+ // Recursively traverse a hierarchy, returning a list of all relevant .js files.
+function paths(dir) {
+ var paths = [];
+
+ try {
+ fs.statSync(dir);
+ }
+ catch (e) {
+ return e;
+ }
+
+ (function traverse(dir, stack) {
+ stack.push(dir);
+ fs.readdirSync(stack.join('/')).forEach(function(file) {
+ var path = stack.concat([file]).join('/'),
+ stat = fs.statSync(path);
+
+ if (file[0] == '.' || file === 'vendor') {
+ return;
+ } else if (stat.isFile() && /\.js$/.test(file)) {
+ paths.push(path);
+ } else if (stat.isDirectory()) {
+ paths.push(path);
+ traverse(file, stack);
+ }
+ });
+ stack.pop();
+ })(dir || '.', []);
+
+ return paths;
+}
diff --git a/BUILD/docs.js b/BUILD/docs.js
index 0a052cd5..31aea417 100644
--- a/BUILD/docs.js
+++ b/BUILD/docs.js
@@ -1,8 +1,6 @@
# Faker.js - generate massive amounts of fake data in the browser and node.js
<img src = "http://imgur.com/KiinQ.png" border = "0">
-### online demo @ <a href = "http://maraksquires.com/Faker.js/">http://maraksquires.com/Faker.js/</a>
-
## USAGE
### browser -
@@ -29,6 +27,12 @@
{{{API}}}
+## Tests
+ npm install .
+ make test
+
+You can view a code coverage report generated in coverage/lcov-report/index.html.
+
## Authors
####Matthew Bergman & Marak Squires
@@ -55,4 +59,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/BUILD/main.js b/BUILD/main.js
index 40a24a87..e7bc6176 100644
--- a/BUILD/main.js
+++ b/BUILD/main.js
@@ -50,7 +50,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
var randomCard = Faker.Helpers.createCard(); // random contact card containing many properties
*/
+!(function(){
+'use strict';
+
+// exported module
var Faker = {};
Faker.version = "0.5.5";
diff --git a/Faker.js b/Faker.js
index 1a0c048b..7f2e1660 100644
--- a/Faker.js
+++ b/Faker.js
@@ -17,7 +17,7 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-/*************** AUTOGENERATED @ 1345801740093 ***************
+/*************** AUTOGENERATED @ 1371016897413 ***************
WARNING: THIS FILE WAS AUTOGENERATED BY THE FAKER BUILD SCRIPT
MODIFYING THIS FILE IS FINE, BUT YOU REALLY SHOULD BE MODIFYING
THE LIBRARY DIRECTLY AND REGENERATING THIS FILE USING BUILD.js!!!!
@@ -36,465 +36,502 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
var randomEmail = Faker.Internet.email(); // [email protected]
var randomCard = Faker.Helpers.createCard(); // random contact card containing many properties
*/
+!(function(){
+'use strict';
+// exported module
var Faker = {};
Faker.version = "0.5.5";
Faker.Name = {};
-Faker.Name.findName = function () {
- var r = Helpers.randomNumber(8);
- switch(r)
- {
- case 0:
- return Helpers.randomize(definitions.name_prefix()) + " " + Helpers.randomize(definitions.first_name()) + " " + Helpers.randomize(definitions.last_name());
- break;
- case 1:
- return Helpers.randomize(definitions.first_name()) + " " + Helpers.randomize(definitions.last_name()); + " " + Helpers.randomize(definitions.name_suffix);
- break;
- }
-
- return Helpers.randomize(definitions.first_name()) + " " + Helpers.randomize(definitions.last_name());
-
-};
-
Faker.Name.firstName = function () {
- return Helpers.randomize(definitions.first_name());
-};
+ return Faker.random.first_name();
+ };
Faker.Name.lastName = function () {
- return Helpers.randomize(definitions.last_name());
-};
+ return Faker.random.last_name();
+ };
+
+Faker.Name.findName = function () {
+ var r = Faker.random.number(8);
+ switch (r) {
+ case 0:
+ return Faker.random.name_prefix() + " " + this.firstName() + " " + this.lastName();
+ case 1:
+ return this.firstName() + " " + this.lastName() + " " + Faker.random.name_suffix();
+ }
+
+ return this.firstName() + " " + this.lastName();
+ };
Faker.Address = {};
Faker.Address.zipCode = function () {
- return Helpers.replaceSymbolWithNumber(Helpers.randomize(["#####", '#####-####']));
-};
+ return Helpers.replaceSymbolWithNumber(Faker.random.array_element(["#####", '#####-####']));
+ };
-Faker.Address.zipCodeFormat = function ( format ) {
- return Helpers.replaceSymbolWithNumber( ["#####", '#####-####'][format] );
-};
+Faker.Address.zipCodeFormat = function (format) {
+ return Helpers.replaceSymbolWithNumber(["#####", '#####-####'][format]);
+ };
Faker.Address.city = function () {
- switch(Helpers.randomNumber(3))
- {
- case 0:
- return Helpers.randomize(definitions.city_prefix()) + " " + Helpers.randomize(definitions.first_name()) + Helpers.randomize(definitions.city_suffix());
- break;
- case 1:
- return Helpers.randomize(definitions.city_prefix()) + " " + Helpers.randomize(definitions.first_name());
- break;
- case 2:
- return Helpers.randomize(definitions.first_name()) + Helpers.randomize(definitions.city_suffix());
- break;
- case 3:
- return Helpers.randomize(definitions.last_name()) + Helpers.randomize(definitions.city_suffix());
- break;
- }
-};
+ var result;
+ switch (Faker.random.number(4)) {
+ case 0:
+ result = Faker.random.city_prefix() + " " + Faker.random.first_name() + Faker.random.city_suffix();
+ break;
+ case 1:
+ result = Faker.random.city_prefix() + " " + Faker.random.first_name();
+ break;
+ case 2:
+ result = Faker.random.first_name() + Faker.random.city_suffix();
+ break;
+ case 3:
+ result = Faker.random.last_name() + Faker.random.city_suffix();
+ break;
+ }
+ return result;
+ };
Faker.Address.streetName = function () {
- switch(Helpers.randomNumber(1))
- {
- case 0:
- return Helpers.randomize(definitions.last_name()) + " " + Helpers.randomize(definitions.street_suffix());
- break;
- case 1:
- return Helpers.randomize(definitions.first_name()) + " " + Helpers.randomize(definitions.street_suffix());
- break;
- }
-};
-
-Faker.Address.streetAddress = function (i) {
- if( typeof i == 'undefined'){ var i = false;}
- var address = "";
- switch(Helpers.randomNumber(2))
- {
- case 0:
- address = Helpers.replaceSymbolWithNumber("#####") + " " + this.streetName();
- break;
- case 1:
- address = Helpers.replaceSymbolWithNumber("####") + " " + this.streetName();
- break;
- case 2:
- address = Helpers.replaceSymbolWithNumber("###") + " " + this.streetName();
- break;
- }
- var full_address = i ? address + " " + this.secondaryAddress() : address;
- return full_address;
-};
+ var result;
+ switch (Faker.random.number(2)) {
+ case 0:
+ result = Faker.random.last_name() + " " + Faker.random.street_suffix();
+ break;
+ case 1:
+ result = Faker.random.first_name() + " " + Faker.random.street_suffix();
+ break;
+ }
+ return result;
+ };
+
+Faker.Address.streetAddress = function (useFullAddress) {
+ if (useFullAddress === undefined) { useFullAddress = false; }
+ var address = "";
+ switch (Faker.random.number(3)) {
+ case 0:
+ address = Helpers.replaceSymbolWithNumber("#####") + " " + this.streetName();
+ break;
+ case 1:
+ address = Helpers.replaceSymbolWithNumber("####") + " " + this.streetName();
+ break;
+ case 2:
+ address = Helpers.replaceSymbolWithNumber("###") + " " + this.streetName();
+ break;
+ }
+ return useFullAddress ? (address + " " + this.secondaryAddress()) : address;
+ };
Faker.Address.secondaryAddress = function () {
- return Helpers.replaceSymbolWithNumber(Helpers.randomize(
- [
- 'Apt. ###',
- 'Suite ###'
- ]
- )
- );
-};
-
-Faker.Address.brState = function ( abbr ) {
- return Helpers.randomize( definitions[ abbr ? 'br_state_abbr' : 'br_state']() );
-};
-
-Faker.Address.ukCounty = function (){
- return Helpers.randomize(definitions.uk_county());
-};
-
-Faker.Address.ukCountry = function (){
- return Helpers.randomize(definitions.uk_country());
-};
-
-Faker.Address.usState = function ( abbr ) {
- return Helpers.randomize( definitions[ abbr ? 'us_state_abbr' : 'us_state']() );
-};
+ return Helpers.replaceSymbolWithNumber(Faker.random.array_element(
+ [
+ 'Apt. ###',
+ 'Suite ###'
+ ]
+ ));
+ };
+
+Faker.Address.brState = function (useAbbr) {
+ return useAbbr ? Faker.random.br_state_abbr() : Faker.random.br_state();
+ };
+
+Faker.Address.ukCounty = function () {
+ return Faker.random.uk_county();
+ };
+
+Faker.Address.ukCountry = function () {
+ return Faker.random.uk_country();
+ };
+
+Faker.Address.usState = function (useAbbr) {
+ return useAbbr ? Faker.random.us_state_abbr() : Faker.random.us_state();
+ };
+
+Faker.Address.latitude = function () {
+ return (Faker.random.number(180 * 10000) / 10000.0 - 90.0).toFixed(4);
+ };
+
+Faker.Address.longitude = function () {
+ return (Faker.random.number(360 * 10000) / 10000.0 - 180.0).toFixed(4);
+ };
Faker.PhoneNumber = {};
-Faker.PhoneNumber.phoneNumber = function (){
-
- return Helpers.replaceSymbolWithNumber(Helpers.randomize(definitions.phone_formats()));
+Faker.PhoneNumber.phoneNumber = function () {
+ return Helpers.replaceSymbolWithNumber(Faker.random.phone_formats());
+ };
-};
-
-Faker.PhoneNumber.phoneNumberFormat = function ( format ){
- return Helpers.replaceSymbolWithNumber(definitions.phone_formats()[format]);
-};
+Faker.PhoneNumber.phoneNumberFormat = function (phoneFormatsArrayIndex) {
+ return Helpers.replaceSymbolWithNumber(definitions.phone_formats[phoneFormatsArrayIndex]);
+ };
Faker.Internet = {};
Faker.Internet.email = function () {
- return this.userName() + "@" + this.domainName();
-};
+ return Faker.Helpers.slugify(this.userName()) + "@" + Faker.Helpers.slugify(this.domainName());
+ };
Faker.Internet.userName = function () {
- switch(Helpers.randomNumber(2))
- {
- case 0:
- return Helpers.randomize(definitions.first_name());
- break;
- case 1:
- return Helpers.randomize(definitions.first_name()) + Helpers.randomize([".", "_"]) + Helpers.randomize(definitions.last_name()) ;
- break;
- }
-};
+ var result;
+ switch (Faker.random.number(2)) {
+ case 0:
+ result = Faker.random.first_name();
+ break;
+ case 1:
+ result = Faker.random.first_name() + Faker.random.array_element([".", "_"]) + Faker.random.last_name();
+ break;
+ }
+ return result;
+ };
Faker.Internet.domainName = function () {
- return this.domainWord() + "." + Helpers.randomize(definitions.domain_suffix());
-};
+ return this.domainWord() + "." + Faker.random.domain_suffix();
+ };
Faker.Internet.domainWord = function () {
- return Helpers.randomize(definitions.first_name()).toLowerCase();
-};
+ return Faker.random.first_name().toLowerCase();
+ };
Faker.Internet.ip = function () {
- var randNum = function() {
- return (Math.random()*254 + 1).toFixed(0);
- }
+ var randNum = function () {
+ return (Math.random() * 254 + 1).toFixed(0);
+ };
- var result = [];
- for(var i=0; i<4; i++) {
- result[i] = randNum();
- }
+ var result = [];
+ for (var i = 0; i < 4; i++) {
+ result[i] = randNum();
+ }
- return result.join(".");
-};
+ return result.join(".");
+ };
Faker.Company = {};
-Faker.Company.companyName = function ( format ) {
- switch( ( format ? format : Helpers.randomNumber(3) ) )
- {
- case 0:
- return Helpers.randomize(definitions.last_name()) + " " + this.companySuffix();
- break;
- case 1:
- return Helpers.randomize(definitions.last_name()) + "-" + Helpers.randomize(definitions.last_name()) ;
- break;
- case 2:
- return Helpers.randomize(definitions.last_name()) + "," + Helpers.randomize(definitions.last_name()) + " and " + Helpers.randomize(definitions.last_name());
- break;
- }
-};
+Faker.Company.suffixes = function () {
+ return ["Inc", "and Sons", "LLC", "Group", "and Daughters"];
+ };
+
+Faker.Company.companyName = function (format) {
+ switch ((format ? format : Faker.random.number(3))) {
+ case 0:
+ return Faker.Name.lastName() + " " + this.companySuffix();
+ case 1:
+ return Faker.Name.lastName() + "-" + Faker.Name.lastName();
+ case 2:
+ return Faker.Name.lastName() + ", " + Faker.Name.lastName() + " and " + Faker.Name.lastName();
+ }
+ };
Faker.Company.companySuffix = function () {
- return Helpers.randomize(["Inc", "and\ Sons", "LLC", "Group", "and\ Daughters"]);
-};
+ return Faker.random.array_element(this.suffixes());
+ };
Faker.Company.catchPhrase = function () {
- return Helpers.randomize(definitions.catch_phrase_adjective()) + " " + Helpers.randomize(definitions.catch_phrase_descriptor()) + " "+ Helpers.randomize(definitions.catch_phrase_noun());
-};
+ return Faker.random.catch_phrase_adjective() + " " +
+ Faker.random.catch_phrase_descriptor() + " " +
+ Faker.random.catch_phrase_noun();
+ };
Faker.Company.bs = function () {
- return Helpers.randomize(definitions.bs_adjective()) + " " + Helpers.randomize(definitions.bs_buzz()) + " "+ Helpers.randomize(definitions.bs_noun());
-};
+ return Faker.random.bs_adjective() + " " +
+ Faker.random.bs_buzz() + " " +
+ Faker.random.bs_noun();
+ };
Faker.Lorem = {};
-Faker.Lorem.words = function (num){
- if( typeof num == 'undefined'){ var num = 3;}
- return Helpers.shuffle(definitions.lorem()).slice(0, num);
- //Words.shuffle[0, num]
-};
-
-Faker.Lorem.sentence = function (wordCount){
- if( typeof wordCount == 'undefined'){ var wordCount = 3;}
-
- // strange issue with the node_min_test failing for captialize, please fix and add this back
- //return this.words(wordCount + Helpers.randomNumber(7)).join(' ').capitalize();
-
- return this.words(wordCount + Helpers.randomNumber(7)).join(' ');
-};
-
-Faker.Lorem.sentences = function (sentenceCount){
- if( typeof sentenceCount == 'undefined'){ var sentenceCount = 3;}
- var sentences = [];
- for(sentenceCount; sentenceCount >= 0; sentenceCount--){
- sentences.push(this.sentence());
- }
- return sentences.join("\n");
-};
-
-Faker.Lorem.paragraph = function (sentenceCount){
- if( typeof sentenceCount == 'undefined'){ var sentenceCount = 3;}
- return this.sentences(sentenceCount + Helpers.randomNumber(3));
-};
-
-Faker.Lorem.paragraphs = function (paragraphCount){
- if( typeof paragraphCount == 'undefined'){ var paragraphCount = 3;}
- var paragraphs = [];
- for(paragraphCount; paragraphCount >= 0; paragraphCount--){
- paragraphs.push(this.paragraph());
- }
- return paragraphs.join("\n \r\t");
-};
+Faker.Lorem.words = function (num) {
+ if (typeof num == 'undefined') { num = 3; }
+ return Helpers.shuffle(definitions.lorem).slice(0, num);
+ };
+
+Faker.Lorem.sentence = function (wordCount, range) {
+ if (typeof wordCount == 'undefined') { wordCount = 3; }
+ if (typeof range == 'undefined') { range = 7; }
+
+ // strange issue with the node_min_test failing for captialize, please fix and add this back
+ //return this.words(wordCount + Helpers.randomNumber(range)).join(' ').capitalize();
+
+ return this.words(wordCount + Faker.random.number(7)).join(' ');
+ };
+
+Faker.Lorem.sentences = function (sentenceCount) {
+ if (typeof sentenceCount == 'undefined') { sentenceCount = 3; }
+ var sentences = [];
+ for (sentenceCount; sentenceCount > 0; sentenceCount--) {
+ sentences.push(this.sentence());
+ }
+ return sentences.join("\n");
+ };
+
+Faker.Lorem.paragraph = function (sentenceCount) {
+ if (typeof sentenceCount == 'undefined') { sentenceCount = 3; }
+ return this.sentences(sentenceCount + Faker.random.number(3));
+ };
+
+Faker.Lorem.paragraphs = function (paragraphCount) {
+ if (typeof paragraphCount == 'undefined') { paragraphCount = 3; }
+ var paragraphs = [];
+ for (paragraphCount; paragraphCount > 0; paragraphCount--) {
+ paragraphs.push(this.paragraph());
+ }
+ return paragraphs.join("\n \r\t");
+ };
Faker.Helpers = {};
Faker.Helpers.randomNumber = function (range) {
- var r = Math.floor(Math.random()*range);
- return r;
+ return Faker.random.number(range);
};
Faker.Helpers.randomize = function (array) {
- var r = Math.floor(Math.random()*array.length);
- return array[r];
+ return Faker.random.array_element(array);
};
-Faker.Helpers.replaceSymbolWithNumber = function (string, symbol){
-
- // default symbol is '#'
- if(typeof symbol == 'undefined'){
- var symbol = '#';
- }
-
- var str = '';
- for(var i = 0; i < string.length; i++){
- if(string[i] == symbol){
- str += Math.floor(Math.random()*10);
- }
- else{
- str += string[i];
- }
- }
- return str;
+Faker.Helpers.slugify = function (string) {
+ return string.replace(/ /g, '-').replace(/[^\w\.\-]+/g, '');
};
-Faker.Helpers.shuffle = function (o){
- for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
- return o;
-};
+Faker.Helpers.replaceSymbolWithNumber = function (string, symbol) {
+ // default symbol is '#'
+ if (symbol === undefined) {
+ symbol = '#';
+ }
-Faker.Helpers.generateDataSet = function (size){
+ var str = '';
+ for (var i = 0; i < string.length; i++) {
+ if (string[i] == symbol) {
+ str += Math.floor(Math.random() * 10);
+ } else {
+ str += string[i];
+ }
+ }
+ return str;
+};
+
+Faker.Helpers.shuffle = function (o) {
+ for (var j, x, i = o.length; i; j = parseInt(Math.random() * i, 10), x = o[--i], o[i] = o[j], o[j] = x);
+ return o;
+};
+
+Faker.Helpers.createCard = function () {
+ return {
+ "name": Faker.Name.findName(),
+ "username": Faker.Internet.userName(),
+ "email": Faker.Internet.email(),
+ "address": {
+ "streetA": Faker.Address.streetName(),
+ "streetB": Faker.Address.streetAddress(),
+ "streetC": Faker.Address.streetAddress(true),
+ "streetD": Faker.Address.secondaryAddress(),
+ "city": Faker.Address.city(),
+ "ukCounty": Faker.Address.ukCounty(),
+ "ukCountry": Faker.Address.ukCountry(),
+ "zipcode": Faker.Address.zipCode(),
+ "geo": {
+ "lat": Faker.Address.latitude(),
+ "lng": Faker.Address.longitude()
+ }
+ },
+ "phone": Faker.PhoneNumber.phoneNumber(),
+ "website": Faker.Internet.domainName(),
+ "company": {
+ "name": Faker.Company.companyName(),
+ "catchPhrase": Faker.Company.catchPhrase(),
+ "bs": Faker.Company.bs()
+ },
+ "posts": [
+ {
+ "words": Faker.Lorem.words(),
+ "sentence": Faker.Lorem.sentence(),
+ "sentences": Faker.Lorem.sentences(),
+ "paragraph": Faker.Lorem.paragraph()
+ },
+ {
+ "words": Faker.Lorem.words(),
+ "sentence": Faker.Lorem.sentence(),
+ "sentences": Faker.Lorem.sentences(),
+ "paragraph": Faker.Lorem.paragraph()
+ },
+ {
+ "words": Faker.Lorem.words(),
+ "sentence": Faker.Lorem.sentence(),
+ "sentences": Faker.Lorem.sentences(),
+ "paragraph": Faker.Lorem.paragraph()
+ }
+ ]
+ };
+};
+
+Faker.Helpers.userCard = function () {
+ return {
+ "name": Faker.Name.findName(),
+ "username": Faker.Internet.userName(),
+ "email": Faker.Internet.email(),
+ "address": {
+ "street": Faker.Address.streetName(true),
+ "suite": Faker.Address.secondaryAddress(),
+ "city": Faker.Address.city(),
+ "zipcode": Faker.Address.zipCode(),
+ "geo": {
+ "lat": Faker.Address.latitude(),
+ "lng": Faker.Address.longitude()
+ }
+ },
+ "phone": Faker.PhoneNumber.phoneNumber(),
+ "website": Faker.Internet.domainName(),
+ "company": {
+ "name": Faker.Company.companyName(),
+ "catchPhrase": Faker.Company.catchPhrase(),
+ "bs": Faker.Company.bs()
+ }
+ };
+};
+
+Faker.random = {};
+Faker.random.number = function (range) {
+ return Math.floor(Math.random() * range);
+ };
+
+Faker.random.array_element = function (array) {
+ var r = Math.floor(Math.random() * array.length);
+ return array[r];
+ };
+
+Faker.random.city_prefix = function () {
+ return this.array_element(definitions.city_prefix);
+ };
+
+Faker.random.city_suffix = function () {
+ return this.array_element(definitions.city_suffix);
+ };
+
+Faker.random.street_suffix = function () {
+ return this.array_element(definitions.street_suffix);
+ };
+
+Faker.random.br_state = function () {
+ return this.array_element(definitions.br_state);
+ };
+
+Faker.random.br_state_abbr = function () {
+ return this.array_element(definitions.br_state_abbr);
+ };
+
+Faker.random.us_state = function () {
+ return this.array_element(definitions.us_state);
+ };
+
+Faker.random.us_state_abbr = function () {
+ return this.array_element(definitions.us_state_abbr);
+ };
+
+Faker.random.uk_county = function () {
+ return this.array_element(definitions.uk_county);
+ };
+
+Faker.random.uk_country = function () {
+ return this.array_element(definitions.uk_country);
+ };
+
+Faker.random.first_name = function () {
+ return this.array_element(definitions.first_name);
+ };
+
+Faker.random.last_name = function () {
+ return this.array_element(definitions.last_name);
+ };
+
+Faker.random.name_prefix = function () {
+ return this.array_element(definitions.name_prefix);
+ };
+
+Faker.random.name_suffix = function () {
+ return this.array_element(definitions.name_suffix);
+ };
+
+Faker.random.catch_phrase_adjective = function () {
+ return this.array_element(definitions.catch_phrase_adjective);
+ };
+
+Faker.random.catch_phrase_descriptor = function () {
+ return this.array_element(definitions.catch_phrase_descriptor);
+ };
+
+Faker.random.catch_phrase_noun = function () {
+ return this.array_element(definitions.catch_phrase_noun);
+ };
+
+Faker.random.bs_adjective = function () {
+ return this.array_element(definitions.bs_adjective);
+ };
+
+Faker.random.bs_buzz = function () {
+ return this.array_element(definitions.bs_buzz);
+ };
+
+Faker.random.bs_noun = function () {
+ return this.array_element(definitions.bs_noun);
+ };
+
+Faker.random.phone_formats = function () {
+ return this.array_element(definitions.phone_formats);
+ };
+
+Faker.random.domain_suffix = function () {
+ return this.array_element(definitions.domain_suffix);
+ };
-};
+Faker.definitions = {};
+Faker.definitions.first_name = ["Aaliyah","Aaron","Abagail","Abbey","Abbie","Abbigail","Abby","Abdiel","Abdul","Abdullah","Abe","Abel","Abelardo","Abigail","Abigale","Abigayle","Abner","Abraham","Ada","Adah","Adalberto","Adaline","Adam","Adan","Addie","Addison","Adela","Adelbert","Adele","Adelia","Adeline","Adell","Adella","Adelle","Aditya","Adolf","Adolfo","Adolph","Adolphus","Adonis","Adrain","Adrian","Adriana","Adrianna","Adriel","Adrien","Adrienne","Afton","Aglae","Agnes","Agustin","Agustina","Ahmad","Ahmed","Aida","Aidan","Aiden","Aileen","Aimee","Aisha","Aiyana","Akeem","Al","Alaina","Alan","Alana","Alanis","Alanna","Alayna","Alba","Albert","Alberta","Albertha","Alberto","Albin","Albina","Alda","Alden","Alec","Aleen","Alejandra","Alejandrin","Alek","Alena","Alene","Alessandra","Alessandro","Alessia","Aletha","Alex","Alexa","Alexander","Alexandra","Alexandre","Alexandrea","Alexandria","Alexandrine","Alexandro","Alexane","Alexanne","Alexie","Alexis","Alexys","Alexzander","Alf","Alfonso","Alfonzo","Alford","Alfred","Alfreda","Alfredo","Ali","Alia","Alice","Alicia","Alisa","Alisha","Alison","Alivia","Aliya","Aliyah","Aliza","Alize","Allan","Allen","Allene","Allie","Allison","Ally","Alphonso","Alta","Althea","Alva","Alvah","Alvena","Alvera","Alverta","Alvina","Alvis","Alyce","Alycia","Alysa","Alysha","Alyson","Alysson","Amalia","Amanda","Amani","Amara","Amari","Amaya","Amber","Ambrose","Amelia","Amelie","Amely","America","Americo","Amie","Amina","Amir","Amira","Amiya","Amos","Amparo","Amy","Amya","Ana","Anabel","Anabelle","Anahi","Anais","Anastacio","Anastasia","Anderson","Andre","Andreane","Andreanne","Andres","Andrew","Andy","Angel","Angela","Angelica","Angelina","Angeline","Angelita","Angelo","Angie","Angus","Anibal","Anika","Anissa","Anita","Aniya","Aniyah","Anjali","Anna","Annabel","Annabell","Annabelle","Annalise","Annamae","Annamarie","Anne","Annetta","Annette","Annie","Ansel","Ansley","Anthony","Antoinette","Antone","Antonetta","Antonette","Antonia","Antonietta","Antonina","Antonio","Antwan","Antwon","Anya","April","Ara","Araceli","Aracely","Arch","Archibald","Ardella","Arden","Ardith","Arely","Ari","Ariane","Arianna","Aric","Ariel","Arielle","Arjun","Arlene","Arlie","Arlo","Armand","Armando","Armani","Arnaldo","Arne","Arno","Arnold","Arnoldo","Arnulfo","Aron","Art","Arthur","Arturo","Arvel","Arvid","Arvilla","Aryanna","Asa","Asha","Ashlee","Ashleigh","Ashley","Ashly","Ashlynn","Ashton","Ashtyn","Asia","Assunta","Astrid","Athena","Aubree","Aubrey","Audie","Audra","Audreanne","Audrey","August","Augusta","Augustine","Augustus","Aurelia","Aurelie","Aurelio","Aurore","Austen","Austin","Austyn","Autumn","Ava","Avery","Avis","Axel","Ayana","Ayden","Ayla","Aylin","Baby","Bailee","Bailey","Barbara","Barney","Baron","Barrett","Barry","Bart","Bartholome","Barton","Baylee","Beatrice","Beau","Beaulah","Bell","Bella","Belle","Ben","Benedict","Benjamin","Bennett","Bennie","Benny","Benton","Berenice","Bernadette","Bernadine","Bernard","Bernardo","Berneice","Bernhard","Bernice","Bernie","Berniece","Bernita","Berry","Bert","Berta","Bertha","Bertram","Bertrand","Beryl","Bessie","Beth","Bethany","Bethel","Betsy","Bette","Bettie","Betty","Bettye","Beulah","Beverly","Bianka","Bill","Billie","Billy","Birdie","Blair","Blaise","Blake","Blanca","Blanche","Blaze","Bo","Bobbie","Bobby","Bonita","Bonnie","Boris","Boyd","Brad","Braden","Bradford","Bradley","Bradly","Brady","Braeden","Brain","Brandi","Brando","Brandon","Brandt","Brandy","Brandyn","Brannon","Branson","Brant","Braulio","Braxton","Brayan","Breana","Breanna","Breanne","Brenda","Brendan","Brenden","Brendon","Brenna","Brennan","Brennon","Brent","Bret","Brett","Bria","Brian","Briana","Brianne","Brice","Bridget","Bridgette","Bridie","Brielle","Brigitte","Brionna","Brisa","Britney","Brittany","Brock","Broderick","Brody","Brook","Brooke","Brooklyn","Brooks","Brown","Bruce","Bryana","Bryce","Brycen","Bryon","Buck","Bud","Buddy","Buford","Bulah","Burdette","Burley","Burnice","Buster","Cade","Caden","Caesar","Caitlyn","Cale","Caleb","Caleigh","Cali","Calista","Callie","Camden","Cameron","Camila","Camilla","Camille","Camren","Camron","Camryn","Camylle","Candace","Candelario","Candice","Candida","Candido","Cara","Carey","Carissa","Carlee","Carleton","Carley","Carli","Carlie","Carlo","Carlos","Carlotta","Carmel","Carmela","Carmella","Carmelo","Carmen","Carmine","Carol","Carolanne","Carole","Carolina","Caroline","Carolyn","Carolyne","Carrie","Carroll","Carson","Carter","Cary","Casandra","Casey","Casimer","Casimir","Casper","Cassandra","Cassandre","Cassidy","Cassie","Catalina","Caterina","Catharine","Catherine","Cathrine","Cathryn","Cathy","Cayla","Ceasar","Cecelia","Cecil","Cecile","Cecilia","Cedrick","Celestine","Celestino","Celia","Celine","Cesar","Chad","Chadd","Chadrick","Chaim","Chance","Chandler","Chanel","Chanelle","Charity","Charlene","Charles","Charley","Charlie","Charlotte","Chase","Chasity","Chauncey","Chaya","Chaz","Chelsea","Chelsey","Chelsie","Chesley","Chester","Chet","Cheyanne","Cheyenne","Chloe","Chris","Christ","Christa","Christelle","Christian","Christiana","Christina","Christine","Christop","Christophe","Christopher","Christy","Chyna","Ciara","Cicero","Cielo","Cierra","Cindy","Citlalli","Clair","Claire","Clara","Clarabelle","Clare","Clarissa","Clark","Claud","Claude","Claudia","Claudie","Claudine","Clay","Clemens","Clement","Clementina","Clementine","Clemmie","Cleo","Cleora","Cleta","Cletus","Cleve","Cleveland","Clifford","Clifton","Clint","Clinton","Clotilde","Clovis","Cloyd","Clyde","Coby","Cody","Colby","Cole","Coleman","Colin","Colleen","Collin","Colt","Colten","Colton","Columbus","Concepcion","Conner","Connie","Connor","Conor","Conrad","Constance","Constantin","Consuelo","Cooper","Cora","Coralie","Corbin","Cordelia","Cordell","Cordia","Cordie","Corene","Corine","Cornelius","Cornell","Corrine","Cortez","Cortney","Cory","Coty","Courtney","Coy","Craig","Crawford","Creola","Cristal","Cristian","Cristina","Cristobal","Cristopher","Cruz","Crystal","Crystel","Cullen","Curt","Curtis","Cydney","Cynthia","Cyril","Cyrus","Dagmar","Dahlia","Daija","Daisha","Daisy","Dakota","Dale","Dallas","Dallin","Dalton","Damaris","Dameon","Damian","Damien","Damion","Damon","Dan","Dana","Dandre","Dane","D'angelo","Dangelo","Danial","Daniela","Daniella","Danielle","Danika","Dannie","Danny","Dante","Danyka","Daphne","Daphnee","Daphney","Darby","Daren","Darian","Dariana","Darien","Dario","Darion","Darius","Darlene","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darrion","Darron","Darryl","Darwin","Daryl","Dashawn","Dasia","Dave","David","Davin","Davion","Davon","Davonte","Dawn","Dawson","Dax","Dayana","Dayna","Dayne","Dayton","Dean","Deangelo","Deanna","Deborah","Declan","Dedric","Dedrick","Dee","Deion","Deja","Dejah","Dejon","Dejuan","Delaney","Delbert","Delfina","Delia","Delilah","Dell","Della","Delmer","Delores","Delpha","Delphia","Delphine","Delta","Demarco","Demarcus","Demario","Demetris","Demetrius","Demond","Dena","Denis","Dennis","Deon","Deondre","Deontae","Deonte","Dereck","Derek","Derick","Deron","Derrick","Deshaun","Deshawn","Desiree","Desmond","Dessie","Destany","Destin","Destinee","Destiney","Destini","Destiny","Devan","Devante","Deven","Devin","Devon","Devonte","Devyn","Dewayne","Dewitt","Dexter","Diamond","Diana","Dianna","Diego","Dillan","Dillon","Dimitri","Dina","Dino","Dion","Dixie","Dock","Dolly","Dolores","Domenic","Domenica","Domenick","Domenico","Domingo","Dominic","Dominique","Don","Donald","Donato","Donavon","Donna","Donnell","Donnie","Donny","Dora","Dorcas","Dorian","Doris","Dorothea","Dorothy","Dorris","Dortha","Dorthy","Doug","Douglas","Dovie","Doyle","Drake","Drew","Duane","Dudley","Dulce","Duncan","Durward","Dustin","Dusty","Dwight","Dylan","Earl","Earlene","Earline","Earnest","Earnestine","Easter","Easton","Ebba","Ebony","Ed","Eda","Edd","Eddie","Eden","Edgar","Edgardo","Edison","Edmond","Edmund","Edna","Eduardo","Edward","Edwardo","Edwin","Edwina","Edyth","Edythe","Effie","Efrain","Efren","Eileen","Einar","Eino","Eladio","Elaina","Elbert","Elda","Eldon","Eldora","Eldred","Eldridge","Eleanora","Eleanore","Eleazar","Electa","Elena","Elenor","Elenora","Eleonore","Elfrieda","Eli","Elian","Eliane","Elias","Eliezer","Elijah","Elinor","Elinore","Elisa","Elisabeth","Elise","Eliseo","Elisha","Elissa","Eliza","Elizabeth","Ella","Ellen","Ellie","Elliot","Elliott","Ellis","Ellsworth","Elmer","Elmira","Elmo","Elmore","Elna","Elnora","Elody","Eloisa","Eloise","Elouise","Eloy","Elroy","Elsa","Else","Elsie","Elta","Elton","Elva","Elvera","Elvie","Elvis","Elwin","Elwyn","Elyse","Elyssa","Elza","Emanuel","Emelia","Emelie","Emely","Emerald","Emerson","Emery","Emie","Emil","Emile","Emilia","Emiliano","Emilie","Emilio","Emily","Emma","Emmalee","Emmanuel","Emmanuelle","Emmet","Emmett","Emmie","Emmitt","Emmy","Emory","Ena","Enid","Enoch","Enola","Enos","Enrico","Enrique","Ephraim","Era","Eriberto","Eric","Erica","Erich","Erick","Ericka","Erik","Erika","Erin","Erling","Erna","Ernest","Ernestina","Ernestine","Ernesto","Ernie","Ervin","Erwin","Eryn","Esmeralda","Esperanza","Esta","Esteban","Estefania","Estel","Estell","Estella","Estelle","Estevan","Esther","Estrella","Etha","Ethan","Ethel","Ethelyn","Ethyl","Ettie","Eudora","Eugene","Eugenia","Eula","Eulah","Eulalia","Euna","Eunice","Eusebio","Eva","Evalyn","Evan","Evangeline","Evans","Eve","Eveline","Evelyn","Everardo","Everett","Everette","Evert","Evie","Ewald","Ewell","Ezekiel","Ezequiel","Ezra","Fabian","Fabiola","Fae","Fannie","Fanny","Fatima","Faustino","Fausto","Favian","Fay","Faye","Federico","Felicia","Felicita","Felicity","Felipa","Felipe","Felix","Felton","Fermin","Fern","Fernando","Ferne","Fidel","Filiberto","Filomena","Finn","Fiona","Flavie","Flavio","Fleta","Fletcher","Flo","Florence","Florencio","Florian","Florida","Florine","Flossie","Floy","Floyd","Ford","Forest","Forrest","Foster","Frances","Francesca","Francesco","Francis","Francisca","Francisco","Franco","Frank","Frankie","Franz","Fred","Freda","Freddie","Freddy","Frederic","Frederick","Frederik","Frederique","Fredrick","Fredy","Freeda","Freeman","Freida","Frida","Frieda","Friedrich","Fritz","Furman","Gabe","Gabriel","Gabriella","Gabrielle","Gaetano","Gage","Gail","Gardner","Garett","Garfield","Garland","Garnet","Garnett","Garret","Garrett","Garrick","Garrison","Garry","Garth","Gaston","Gavin","Gay","Gayle","Gaylord","Gene","General","Genesis","Genevieve","Gennaro","Genoveva","Geo","Geoffrey","George","Georgette","Georgiana","Georgianna","Geovanni","Geovanny","Geovany","Gerald","Geraldine","Gerard","Gerardo","Gerda","Gerhard","Germaine","German","Gerry","Gerson","Gertrude","Gia","Gianni","Gideon","Gilbert","Gilberto","Gilda","Giles","Gillian","Gina","Gino","Giovani","Giovanna","Giovanni","Giovanny","Gisselle","Giuseppe","Gladyce","Gladys","Glen","Glenda","Glenna","Glennie","Gloria","Godfrey","Golda","Golden","Gonzalo","Gordon","Grace","Gracie","Graciela","Grady","Graham","Grant","Granville","Grayce","Grayson","Green","Greg","Gregg","Gregoria","Gregorio","Gregory","Greta","Gretchen","Greyson","Griffin","Grover","Guadalupe","Gudrun","Guido","Guillermo","Guiseppe","Gunnar","Gunner","Gus","Gussie","Gust","Gustave","Guy","Gwen","Gwendolyn","Hadley","Hailee","Hailey","Hailie","Hal","Haleigh","Haley","Halie","Halle","Hallie","Hank","Hanna","Hannah","Hans","Hardy","Harley","Harmon","Harmony","Harold","Harrison","Harry","Harvey","Haskell","Hassan","Hassie","Hattie","Haven","Hayden","Haylee","Hayley","Haylie","Hazel","Hazle","Heath","Heather","Heaven","Heber","Hector","Heidi","Helen","Helena","Helene","Helga","Hellen","Helmer","Heloise","Henderson","Henri","Henriette","Henry","Herbert","Herman","Hermann","Hermina","Herminia","Herminio","Hershel","Herta","Hertha","Hester","Hettie","Hilario","Hilbert","Hilda","Hildegard","Hillard","Hillary","Hilma","Hilton","Hipolito","Hiram","Hobart","Holden","Hollie","Hollis","Holly","Hope","Horace","Horacio","Hortense","Hosea","Houston","Howard","Howell","Hoyt","Hubert","Hudson","Hugh","Hulda","Humberto","Hunter","Hyman","Ian","Ibrahim","Icie","Ida","Idell","Idella","Ignacio","Ignatius","Ike","Ila","Ilene","Iliana","Ima","Imani","Imelda","Immanuel","Imogene","Ines","Irma","Irving","Irwin","Isaac","Isabel","Isabell","Isabella","Isabelle","Isac","Isadore","Isai","Isaiah","Isaias","Isidro","Ismael","Isobel","Isom","Israel","Issac","Itzel","Iva","Ivah","Ivory","Ivy","Izabella","Izaiah","Jabari","Jace","Jacey","Jacinthe","Jacinto","Jack","Jackeline","Jackie","Jacklyn","Jackson","Jacky","Jaclyn","Jacquelyn","Jacques","Jacynthe","Jada","Jade","Jaden","Jadon","Jadyn","Jaeden","Jaida","Jaiden","Jailyn","Jaime","Jairo","Jakayla","Jake","Jakob","Jaleel","Jalen","Jalon","Jalyn","Jamaal","Jamal","Jamar","Jamarcus","Jamel","Jameson","Jamey","Jamie","Jamil","Jamir","Jamison","Jammie","Jan","Jana","Janae","Jane","Janelle","Janessa","Janet","Janice","Janick","Janie","Janis","Janiya","Jannie","Jany","Jaquan","Jaquelin","Jaqueline","Jared","Jaren","Jarod","Jaron","Jarred","Jarrell","Jarret","Jarrett","Jarrod","Jarvis","Jasen","Jasmin","Jason","Jasper","Jaunita","Javier","Javon","Javonte","Jay","Jayce","Jaycee","Jayda","Jayde","Jayden","Jaydon","Jaylan","Jaylen","Jaylin","Jaylon","Jayme","Jayne","Jayson","Jazlyn","Jazmin","Jazmyn","Jazmyne","Jean","Jeanette","Jeanie","Jeanne","Jed","Jedediah","Jedidiah","Jeff","Jefferey","Jeffery","Jeffrey","Jeffry","Jena","Jenifer","Jennie","Jennifer","Jennings","Jennyfer","Jensen","Jerad","Jerald","Jeramie","Jeramy","Jerel","Jeremie","Jeremy","Jermain","Jermaine","Jermey","Jerod","Jerome","Jeromy","Jerrell","Jerrod","Jerrold","Jerry","Jess","Jesse","Jessica","Jessie","Jessika","Jessy","Jessyca","Jesus","Jett","Jettie","Jevon","Jewel","Jewell","Jillian","Jimmie","Jimmy","Jo","Joan","Joana","Joanie","Joanne","Joannie","Joanny","Joany","Joaquin","Jocelyn","Jodie","Jody","Joe","Joel","Joelle","Joesph","Joey","Johan","Johann","Johanna","Johathan","John","Johnathan","Johnathon","Johnnie","Johnny","Johnpaul","Johnson","Jolie","Jon","Jonas","Jonatan","Jonathan","Jonathon","Jordan","Jordane","Jordi","Jordon","Jordy","Jordyn","Jorge","Jose","Josefa","Josefina","Joseph","Josephine","Josh","Joshua","Joshuah","Josiah","Josiane","Josianne","Josie","Josue","Jovan","Jovani","Jovanny","Jovany","Joy","Joyce","Juana","Juanita","Judah","Judd","Jude","Judge","Judson","Judy","Jules","Julia","Julian","Juliana","Julianne","Julie","Julien","Juliet","Julio","Julius","June","Junior","Junius","Justen","Justice","Justina","Justine","Juston","Justus","Justyn","Juvenal","Juwan","Kacey","Kaci","Kacie","Kade","Kaden","Kadin","Kaela","Kaelyn","Kaia","Kailee","Kailey","Kailyn","Kaitlin","Kaitlyn","Kale","Kaleb","Kaleigh","Kaley","Kali","Kallie","Kameron","Kamille","Kamren","Kamron","Kamryn","Kane","Kara","Kareem","Karelle","Karen","Kari","Kariane","Karianne","Karina","Karine","Karl","Karlee","Karley","Karli","Karlie","Karolann","Karson","Kasandra","Kasey","Kassandra","Katarina","Katelin","Katelyn","Katelynn","Katharina","Katherine","Katheryn","Kathleen","Kathlyn","Kathryn","Kathryne","Katlyn","Katlynn","Katrina","Katrine","Kattie","Kavon","Kay","Kaya","Kaycee","Kayden","Kayla","Kaylah","Kaylee","Kayleigh","Kayley","Kayli","Kaylie","Kaylin","Keagan","Keanu","Keara","Keaton","Keegan","Keeley","Keely","Keenan","Keira","Keith","Kellen","Kelley","Kelli","Kellie","Kelly","Kelsi","Kelsie","Kelton","Kelvin","Ken","Kendall","Kendra","Kendrick","Kenna","Kennedi","Kennedy","Kenneth","Kennith","Kenny","Kenton","Kenya","Kenyatta","Kenyon","Keon","Keshaun","Keshawn","Keven","Kevin","Kevon","Keyon","Keyshawn","Khalid","Khalil","Kian","Kiana","Kianna","Kiara","Kiarra","Kiel","Kiera","Kieran","Kiley","Kim","Kimberly","King","Kip","Kira","Kirk","Kirsten","Kirstin","Kitty","Kobe","Koby","Kody","Kolby","Kole","Korbin","Korey","Kory","Kraig","Kris","Krista","Kristian","Kristin","Kristina","Kristofer","Kristoffer","Kristopher","Kristy","Krystal","Krystel","Krystina","Kurt","Kurtis","Kyla","Kyle","Kylee","Kyleigh","Kyler","Kylie","Kyra","Lacey","Lacy","Ladarius","Lafayette","Laila","Laisha","Lamar","Lambert","Lamont","Lance","Landen","Lane","Laney","Larissa","Laron","Larry","Larue","Laura","Laurel","Lauren","Laurence","Lauretta","Lauriane","Laurianne","Laurie","Laurine","Laury","Lauryn","Lavada","Lavern","Laverna","Laverne","Lavina","Lavinia","Lavon","Lavonne","Lawrence","Lawson","Layla","Layne","Lazaro","Lea","Leann","Leanna","Leanne","Leatha","Leda","Lee","Leif","Leila","Leilani","Lela","Lelah","Leland","Lelia","Lempi","Lemuel","Lenna","Lennie","Lenny","Lenora","Lenore","Leo","Leola","Leon","Leonard","Leonardo","Leone","Leonel","Leonie","Leonor","Leonora","Leopold","Leopoldo","Leora","Lera","Lesley","Leslie","Lesly","Lessie","Lester","Leta","Letha","Letitia","Levi","Lew","Lewis","Lexi","Lexie","Lexus","Lia","Liam","Liana","Libbie","Libby","Lila","Lilian","Liliana","Liliane","Lilla","Lillian","Lilliana","Lillie","Lilly","Lily","Lilyan","Lina","Lincoln","Linda","Lindsay","Lindsey","Linnea","Linnie","Linwood","Lionel","Lisa","Lisandro","Lisette","Litzy","Liza","Lizeth","Lizzie","Llewellyn","Lloyd","Logan","Lois","Lola","Lolita","Loma","Lon","London","Lonie","Lonnie","Lonny","Lonzo","Lora","Loraine","Loren","Lorena","Lorenz","Lorenza","Lorenzo","Lori","Lorine","Lorna","Lottie","Lou","Louie","Louisa","Lourdes","Louvenia","Lowell","Loy","Loyal","Loyce","Lucas","Luciano","Lucie","Lucienne","Lucile","Lucinda","Lucio","Lucious","Lucius","Lucy","Ludie","Ludwig","Lue","Luella","Luigi","Luis","Luisa","Lukas","Lula","Lulu","Luna","Lupe","Lura","Lurline","Luther","Luz","Lyda","Lydia","Lyla","Lynn","Lyric","Lysanne","Mabel","Mabelle","Mable","Mac","Macey","Maci","Macie","Mack","Mackenzie","Macy","Madaline","Madalyn","Maddison","Madeline","Madelyn","Madelynn","Madge","Madie","Madilyn","Madisen","Madison","Madisyn","Madonna","Madyson","Mae","Maegan","Maeve","Mafalda","Magali","Magdalen","Magdalena","Maggie","Magnolia","Magnus","Maia","Maida","Maiya","Major","Makayla","Makenna","Makenzie","Malachi","Malcolm","Malika","Malinda","Mallie","Mallory","Malvina","Mandy","Manley","Manuel","Manuela","Mara","Marc","Marcel","Marcelina","Marcelino","Marcella","Marcelle","Marcellus","Marcelo","Marcia","Marco","Marcos","Marcus","Margaret","Margarete","Margarett","Margaretta","Margarette","Margarita","Marge","Margie","Margot","Margret","Marguerite","Maria","Mariah","Mariam","Marian","Mariana","Mariane","Marianna","Marianne","Mariano","Maribel","Marie","Mariela","Marielle","Marietta","Marilie","Marilou","Marilyne","Marina","Mario","Marion","Marisa","Marisol","Maritza","Marjolaine","Marjorie","Marjory","Mark","Markus","Marlee","Marlen","Marlene","Marley","Marlin","Marlon","Marques","Marquis","Marquise","Marshall","Marta","Martin","Martina","Martine","Marty","Marvin","Mary","Maryam","Maryjane","Maryse","Mason","Mateo","Mathew","Mathias","Mathilde","Matilda","Matilde","Matt","Matteo","Mattie","Maud","Maude","Maudie","Maureen","Maurice","Mauricio","Maurine","Maverick","Mavis","Max","Maxie","Maxime","Maximilian","Maximillia","Maximillian","Maximo","Maximus","Maxine","Maxwell","May","Maya","Maybell","Maybelle","Maye","Maymie","Maynard","Mayra","Mazie","Mckayla","Mckenna","Mckenzie","Meagan","Meaghan","Meda","Megane","Meggie","Meghan","Mekhi","Melany","Melba","Melisa","Melissa","Mellie","Melody","Melvin","Melvina","Melyna","Melyssa","Mercedes","Meredith","Merl","Merle","Merlin","Merritt","Mertie","Mervin","Meta","Mia","Micaela","Micah","Michael","Michaela","Michale","Micheal","Michel","Michele","Michelle","Miguel","Mikayla","Mike","Mikel","Milan","Miles","Milford","Miller","Millie","Milo","Milton","Mina","Minerva","Minnie","Miracle","Mireille","Mireya","Misael","Missouri","Misty","Mitchel","Mitchell","Mittie","Modesta","Modesto","Mohamed","Mohammad","Mohammed","Moises","Mollie","Molly","Mona","Monica","Monique","Monroe","Monserrat","Monserrate","Montana","Monte","Monty","Morgan","Moriah","Morris","Mortimer","Morton","Mose","Moses","Moshe","Mossie","Mozell","Mozelle","Muhammad","Muriel","Murl","Murphy","Murray","Mustafa","Mya","Myah","Mylene","Myles","Myra","Myriam","Myrl","Myrna","Myron","Myrtice","Myrtie","Myrtis","Myrtle","Nadia","Nakia","Name","Nannie","Naomi","Naomie","Napoleon","Narciso","Nash","Nasir","Nat","Natalia","Natalie","Natasha","Nathan","Nathanael","Nathanial","Nathaniel","Nathen","Nayeli","Neal","Ned","Nedra","Neha","Neil","Nelda","Nella","Nelle","Nellie","Nels","Nelson","Neoma","Nestor","Nettie","Neva","Newell","Newton","Nia","Nicholas","Nicholaus","Nichole","Nick","Nicklaus","Nickolas","Nico","Nicola","Nicolas","Nicole","Nicolette","Nigel","Nikita","Nikki","Nikko","Niko","Nikolas","Nils","Nina","Noah","Noble","Noe","Noel","Noelia","Noemi","Noemie","Noemy","Nola","Nolan","Nona","Nora","Norbert","Norberto","Norene","Norma","Norris","Norval","Norwood","Nova","Novella","Nya","Nyah","Nyasia","Obie","Oceane","Ocie","Octavia","Oda","Odell","Odessa","Odie","Ofelia","Okey","Ola","Olaf","Ole","Olen","Oleta","Olga","Olin","Oliver","Ollie","Oma","Omari","Omer","Ona","Onie","Opal","Ophelia","Ora","Oral","Oran","Oren","Orie","Orin","Orion","Orland","Orlando","Orlo","Orpha","Orrin","Orval","Orville","Osbaldo","Osborne","Oscar","Osvaldo","Oswald","Oswaldo","Otha","Otho","Otilia","Otis","Ottilie","Ottis","Otto","Ova","Owen","Ozella","Pablo","Paige","Palma","Pamela","Pansy","Paolo","Paris","Parker","Pascale","Pasquale","Pat","Patience","Patricia","Patrick","Patsy","Pattie","Paul","Paula","Pauline","Paxton","Payton","Pearl","Pearlie","Pearline","Pedro","Peggie","Penelope","Percival","Percy","Perry","Pete","Peter","Petra","Peyton","Philip","Phoebe","Phyllis","Pierce","Pierre","Pietro","Pink","Pinkie","Piper","Polly","Porter","Precious","Presley","Preston","Price","Prince","Princess","Priscilla","Providenci","Prudence","Queen","Queenie","Quentin","Quincy","Quinn","Quinten","Quinton","Rachael","Rachel","Rachelle","Rae","Raegan","Rafael","Rafaela","Raheem","Rahsaan","Rahul","Raina","Raleigh","Ralph","Ramiro","Ramon","Ramona","Randal","Randall","Randi","Randy","Ransom","Raoul","Raphael","Raphaelle","Raquel","Rashad","Rashawn","Rasheed","Raul","Raven","Ray","Raymond","Raymundo","Reagan","Reanna","Reba","Rebeca","Rebecca","Rebeka","Rebekah","Reece","Reed","Reese","Regan","Reggie","Reginald","Reid","Reilly","Reina","Reinhold","Remington","Rene","Renee","Ressie","Reta","Retha","Retta","Reuben","Reva","Rex","Rey","Reyes","Reymundo","Reyna","Reynold","Rhea","Rhett","Rhianna","Rhiannon","Rhoda","Ricardo","Richard","Richie","Richmond","Rick","Rickey","Rickie","Ricky","Rico","Rigoberto","Riley","Rita","River","Robb","Robbie","Robert","Roberta","Roberto","Robin","Robyn","Rocio","Rocky","Rod","Roderick","Rodger","Rodolfo","Rodrick","Rodrigo","Roel","Rogelio","Roger","Rogers","Rolando","Rollin","Roma","Romaine","Roman","Ron","Ronaldo","Ronny","Roosevelt","Rory","Rosa","Rosalee","Rosalia","Rosalind","Rosalinda","Rosalyn","Rosamond","Rosanna","Rosario","Roscoe","Rose","Rosella","Roselyn","Rosemarie","Rosemary","Rosendo","Rosetta","Rosie","Rosina","Roslyn","Ross","Rossie","Rowan","Rowena","Rowland","Roxane","Roxanne","Roy","Royal","Royce","Rozella","Ruben","Rubie","Ruby","Rubye","Rudolph","Rudy","Rupert","Russ","Russel","Russell","Rusty","Ruth","Ruthe","Ruthie","Ryan","Ryann","Ryder","Rylan","Rylee","Ryleigh","Ryley","Sabina","Sabrina","Sabryna","Sadie","Sadye","Sage","Saige","Sallie","Sally","Salma","Salvador","Salvatore","Sam","Samanta","Samantha","Samara","Samir","Sammie","Sammy","Samson","Sandra","Sandrine","Sandy","Sanford","Santa","Santiago","Santina","Santino","Santos","Sarah","Sarai","Sarina","Sasha","Saul","Savanah","Savanna","Savannah","Savion","Scarlett","Schuyler","Scot","Scottie","Scotty","Seamus","Sean","Sebastian","Sedrick","Selena","Selina","Selmer","Serena","Serenity","Seth","Shad","Shaina","Shakira","Shana","Shane","Shanel","Shanelle","Shania","Shanie","Shaniya","Shanna","Shannon","Shanny","Shanon","Shany","Sharon","Shaun","Shawn","Shawna","Shaylee","Shayna","Shayne","Shea","Sheila","Sheldon","Shemar","Sheridan","Sherman","Sherwood","Shirley","Shyann","Shyanne","Sibyl","Sid","Sidney","Sienna","Sierra","Sigmund","Sigrid","Sigurd","Silas","Sim","Simeon","Simone","Sincere","Sister","Skye","Skyla","Skylar","Sofia","Soledad","Solon","Sonia","Sonny","Sonya","Sophia","Sophie","Spencer","Stacey","Stacy","Stan","Stanford","Stanley","Stanton","Stefan","Stefanie","Stella","Stephan","Stephania","Stephanie","Stephany","Stephen","Stephon","Sterling","Steve","Stevie","Stewart","Stone","Stuart","Summer","Sunny","Susan","Susana","Susanna","Susie","Suzanne","Sven","Syble","Sydnee","Sydney","Sydni","Sydnie","Sylvan","Sylvester","Sylvia","Tabitha","Tad","Talia","Talon","Tamara","Tamia","Tania","Tanner","Tanya","Tara","Taryn","Tate","Tatum","Tatyana","Taurean","Tavares","Taya","Taylor","Teagan","Ted","Telly","Terence","Teresa","Terrance","Terrell","Terrence","Terrill","Terry","Tess","Tessie","Tevin","Thad","Thaddeus","Thalia","Thea","Thelma","Theo","Theodora","Theodore","Theresa","Therese","Theresia","Theron","Thomas","Thora","Thurman","Tia","Tiana","Tianna","Tiara","Tierra","Tiffany","Tillman","Timmothy","Timmy","Timothy","Tina","Tito","Titus","Tobin","Toby","Tod","Tom","Tomas","Tomasa","Tommie","Toney","Toni","Tony","Torey","Torrance","Torrey","Toy","Trace","Tracey","Tracy","Travis","Travon","Tre","Tremaine","Tremayne","Trent","Trenton","Tressa","Tressie","Treva","Trever","Trevion","Trevor","Trey","Trinity","Trisha","Tristian","Tristin","Triston","Troy","Trudie","Trycia","Trystan","Turner","Twila","Tyler","Tyra","Tyree","Tyreek","Tyrel","Tyrell","Tyrese","Tyrique","Tyshawn","Tyson","Ubaldo","Ulices","Ulises","Una","Unique","Urban","Uriah","Uriel","Ursula","Vada","Valentin","Valentina","Valentine","Valerie","Vallie","Van","Vance","Vanessa","Vaughn","Veda","Velda","Vella","Velma","Velva","Vena","Verda","Verdie","Vergie","Verla","Verlie","Vern","Verna","Verner","Vernice","Vernie","Vernon","Verona","Veronica","Vesta","Vicenta","Vicente","Vickie","Vicky","Victor","Victoria","Vida","Vidal","Vilma","Vince","Vincent","Vincenza","Vincenzo","Vinnie","Viola","Violet","Violette","Virgie","Virgil","Virginia","Virginie","Vita","Vito","Viva","Vivian","Viviane","Vivianne","Vivien","Vivienne","Vladimir","Wade","Waino","Waldo","Walker","Wallace","Walter","Walton","Wanda","Ward","Warren","Watson","Wava","Waylon","Wayne","Webster","Weldon","Wellington","Wendell","Wendy","Werner","Westley","Weston","Whitney","Wilber","Wilbert","Wilburn","Wiley","Wilford","Wilfred","Wilfredo","Wilfrid","Wilhelm","Wilhelmine","Will","Willa","Willard","William","Willie","Willis","Willow","Willy","Wilma","Wilmer","Wilson","Wilton","Winfield","Winifred","Winnifred","Winona","Winston","Woodrow","Wyatt","Wyman","Xander","Xavier","Xzavier","Yadira","Yasmeen","Yasmin","Yasmine","Yazmin","Yesenia","Yessenia","Yolanda","Yoshiko","Yvette","Yvonne","Zachariah","Zachary","Zachery","Zack","Zackary","Zackery","Zakary","Zander","Zane","Zaria","Zechariah","Zelda","Zella","Zelma","Zena","Zetta","Zion","Zita","Zoe","Zoey","Zoie","Zoila","Zola","Zora","Zul"];
-Faker.Helpers.createCard = function (){
-
- return {
- "name":Faker.Name.findName(),
- "username":Faker.Internet.userName(),
- "email":Faker.Internet.email(),
- "address":{
- "streetA":Faker.Address.streetName(),
- "streetB":Faker.Address.streetAddress(),
- "streetC":Faker.Address.streetAddress(true),
- "streetD":Faker.Address.secondaryAddress(),
- "city":Faker.Address.city(),
- "ukCounty":Faker.Address.ukCounty(),
- "ukCountry":Faker.Address.ukCountry(),
- "zipcode":Faker.Address.zipCode()
- },
- "phone":Faker.PhoneNumber.phoneNumber(),
- "website":Faker.Internet.domainName(),
- "company":{
- "name":Faker.Company.companyName(),
- "catchPhrase":Faker.Company.catchPhrase(),
- "bs":Faker.Company.bs(),
- },
- "posts":[
- {
- "words":Faker.Lorem.words(),
- "sentence":Faker.Lorem.sentence(),
- "sentences":Faker.Lorem.sentences(),
- "paragraph":Faker.Lorem.paragraph()
- },
- {
- "words":Faker.Lorem.words(),
- "sentence":Faker.Lorem.sentence(),
- "sentences":Faker.Lorem.sentences(),
- "paragraph":Faker.Lorem.paragraph()
- },
- {
- "words":Faker.Lorem.words(),
- "sentence":Faker.Lorem.sentence(),
- "sentences":Faker.Lorem.sentences(),
- "paragraph":Faker.Lorem.paragraph()
- }
- ]
- };
-};
+Faker.definitions.last_name = ["Abbott","Abernathy","Abshire","Adams","Altenwerth","Anderson","Ankunding","Armstrong","Auer","Aufderhar","Bahringer","Bailey","Balistreri","Barrows","Bartell","Bartoletti","Barton","Bashirian","Batz","Bauch","Baumbach","Bayer","Beahan","Beatty","Bechtelar","Becker","Bednar","Beer","Beier","Berge","Bergnaum","Bergstrom","Bernhard","Bernier","Bins","Blanda","Blick","Block","Bode","Boehm","Bogan","Bogisich","Borer","Bosco","Botsford","Boyer","Boyle","Bradtke","Brakus","Braun","Breitenberg","Brekke","Brown","Bruen","Buckridge","Carroll","Carter","Cartwright","Casper","Cassin","Champlin","Christiansen","Cole","Collier","Collins","Conn","Connelly","Conroy","Considine","Corkery","Cormier","Corwin","Cremin","Crist","Crona","Cronin","Crooks","Cruickshank","Cummerata","Cummings","Dach","D'Amore","Daniel","Dare","Daugherty","Davis","Deckow","Denesik","Dibbert","Dickens","Dicki","Dickinson","Dietrich","Donnelly","Dooley","Douglas","Doyle","DuBuque","Durgan","Ebert","Effertz","Eichmann","Emard","Emmerich","Erdman","Ernser","Fadel","Fahey","Farrell","Fay","Feeney","Feest","Feil","Ferry","Fisher","Flatley","Frami","Franecki","Friesen","Fritsch","Funk","Gaylord","Gerhold","Gerlach","Gibson","Gislason","Gleason","Gleichner","Glover","Goldner","Goodwin","Gorczany","Gottlieb","Goyette","Grady","Graham","Grant","Green","Greenfelder","Greenholt","Grimes","Gulgowski","Gusikowski","Gutkowski","Guªann","Haag","Hackett","Hagenes","Hahn","Haley","Halvorson","Hamill","Hammes","Hand","Hane","Hansen","Harber","Harris","Harªann","Harvey","Hauck","Hayes","Heaney","Heathcote","Hegmann","Heidenreich","Heller","Herman","Hermann","Hermiston","Herzog","Hessel","Hettinger","Hickle","Hilll","Hills","Hilpert","Hintz","Hirthe","Hodkiewicz","Hoeger","Homenick","Hoppe","Howe","Howell","Hudson","Huel","Huels","Hyatt","Jacobi","Jacobs","Jacobson","Jakubowski","Jaskolski","Jast","Jenkins","Jerde","Jewess","Johns","Johnson","Johnston","Jones","Kassulke","Kautzer","Keebler","Keeling","Kemmer","Kerluke","Kertzmann","Kessler","Kiehn","Kihn","Kilback","King","Kirlin","Klein","Kling","Klocko","Koch","Koelpin","Koepp","Kohler","Konopelski","Koss","Kovacek","Kozey","Krajcik","Kreiger","Kris","Kshlerin","Kub","Kuhic","Kuhlman","Kuhn","Kulas","Kunde","Kunze","Kuphal","Kutch","Kuvalis","Labadie","Lakin","Lang","Langosh","Langworth","Larkin","Larson","Leannon","Lebsack","Ledner","Leffler","Legros","Lehner","Lemke","Lesch","Leuschke","Lind","Lindgren","Littel","Little","Lockman","Lowe","Lubowitz","Lueilwitz","Luettgen","Lynch","Macejkovic","Maggio","Mann","Mante","Marks","Marquardt","Marvin","Mayer","Mayert","McClure","McCullough","McDermott","McGlynn","McKenzie","McLaughlin","Medhurst","Mertz","Metz","Miller","Mills","Mitchell","Moen","Mohr","Monahan","Moore","Morar","Morissette","Mosciski","Mraz","Mueller","Muller","Murazik","Murphy","Murray","Nader","Nicolas","Nienow","Nikolaus","Nitzsche","Nolan","Oberbrunner","O'Connell","O'Conner","O'Hara","O'Keefe","O'Kon","Okuneva","Olson","Ondricka","O'Reilly","Orn","Ortiz","Osinski","Pacocha","Padberg","Pagac","Parisian","Parker","Paucek","Pfannerstill","Pfeffer","Pollich","Pouros","Powlowski","Predovic","Price","Prohaska","Prosacco","Purdy","Quigley","Quitzon","Rath","Ratke","Rau","Raynor","Reichel","Reichert","Reilly","Reinger","Rempel","Renner","Reynolds","Rice","Rippin","Ritchie","Robel","Roberts","Rodriguez","Rogahn","Rohan","Rolfson","Romaguera","Roob","Rosenbaum","Rowe","Ruecker","Runolfsdottir","Runolfsson","Runte","Russel","Rutherford","Ryan","Sanford","Satterfield","Sauer","Sawayn","Schaden","Schaefer","Schamberger","Schiller","Schimmel","Schinner","Schmeler","Schmidt","Schmitt","Schneider","Schoen","Schowalter","Schroeder","Schulist","Schultz","Schumm","Schuppe","Schuster","Senger","Shanahan","Shields","Simonis","Sipes","Skiles","Smith","Smitham","Spencer","Spinka","Sporer","Stamm","Stanton","Stark","Stehr","Steuber","Stiedemann","Stokes","Stoltenberg","Stracke","Streich","Stroman","Strosin","Swaniawski","Swift","Terry","Thiel","Thompson","Tillman","Torp","Torphy","Towne","Toy","Trantow","Tremblay","Treutel","Tromp","Turcotte","Turner","Ullrich","Upton","Vandervort","Veum","Volkman","Von","VonRueden","Waelchi","Walker","Walsh","Walter","Ward","Waters","Watsica","Weber","Wehner","Weimann","Weissnat","Welch","West","White","Wiegand","Wilderman","Wilkinson","Will","Williamson","Willms","Windler","Wintheiser","Wisoky","Wisozk","Witting","Wiza","Wolf","Wolff","Wuckert","Wunsch","Wyman","Yost","Yundt","Zboncak","Zemlak","Ziemann","Zieme","Zulauf"];
-Faker.Helpers.userCard = function (){
-
- return {
- "name":Faker.Name.findName(),
- "username":Faker.Internet.userName(),
- "email":Faker.Internet.email(),
- "address":{
- "street":Faker.Address.streetName(true),
- "suite":Faker.Address.secondaryAddress(),
- "city":Faker.Address.city(),
- "zipcode":Faker.Address.zipCode()
- },
- "phone":Faker.PhoneNumber.phoneNumber(),
- "website":Faker.Internet.domainName(),
- "company":{
- "name":Faker.Company.companyName(),
- "catchPhrase":Faker.Company.catchPhrase(),
- "bs":Faker.Company.bs(),
- },
- };
-};
+Faker.definitions.name_prefix = ["Mr.","Mrs.","Ms.","Miss","Dr."];
-Faker.definitions = {};
-Faker.definitions.first_name = function (){return ["Aaliyah","Aaron","Abagail","Abbey","Abbie","Abbigail","Abby","Abdiel","Abdul","Abdullah","Abe","Abel","Abelardo","Abigail","Abigale","Abigayle","Abner","Abraham","Ada","Adah","Adalberto","Adaline","Adam","Adan","Addie","Addison","Adela","Adelbert","Adele","Adelia","Adeline","Adell","Adella","Adelle","Aditya","Adolf","Adolfo","Adolph","Adolphus","Adonis","Adrain","Adrian","Adriana","Adrianna","Adriel","Adrien","Adrienne","Afton","Aglae","Agnes","Agustin","Agustina","Ahmad","Ahmed","Aida","Aidan","Aiden","Aileen","Aimee","Aisha","Aiyana","Akeem","Al","Alaina","Alan","Alana","Alanis","Alanna","Alayna","Alba","Albert","Alberta","Albertha","Alberto","Albin","Albina","Alda","Alden","Alec","Aleen","Alejandra","Alejandrin","Alek","Alena","Alene","Alessandra","Alessandro","Alessia","Aletha","Alex","Alexa","Alexander","Alexandra","Alexandre","Alexandrea","Alexandria","Alexandrine","Alexandro","Alexane","Alexanne","Alexie","Alexis","Alexys","Alexzander","Alf","Alfonso","Alfonzo","Alford","Alfred","Alfreda","Alfredo","Ali","Alia","Alice","Alicia","Alisa","Alisha","Alison","Alivia","Aliya","Aliyah","Aliza","Alize","Allan","Allen","Allene","Allie","Allison","Ally","Alphonso","Alta","Althea","Alva","Alvah","Alvena","Alvera","Alverta","Alvina","Alvis","Alyce","Alycia","Alysa","Alysha","Alyson","Alysson","Amalia","Amanda","Amani","Amara","Amari","Amaya","Amber","Ambrose","Amelia","Amelie","Amely","America","Americo","Amie","Amina","Amir","Amira","Amiya","Amos","Amparo","Amy","Amya","Ana","Anabel","Anabelle","Anahi","Anais","Anastacio","Anastasia","Anderson","Andre","Andreane","Andreanne","Andres","Andrew","Andy","Angel","Angela","Angelica","Angelina","Angeline","Angelita","Angelo","Angie","Angus","Anibal","Anika","Anissa","Anita","Aniya","Aniyah","Anjali","Anna","Annabel","Annabell","Annabelle","Annalise","Annamae","Annamarie","Anne","Annetta","Annette","Annie","Ansel","Ansley","Anthony","Antoinette","Antone","Antonetta","Antonette","Antonia","Antonietta","Antonina","Antonio","Antwan","Antwon","Anya","April","Ara","Araceli","Aracely","Arch","Archibald","Ardella","Arden","Ardith","Arely","Ari","Ariane","Arianna","Aric","Ariel","Arielle","Arjun","Arlene","Arlie","Arlo","Armand","Armando","Armani","Arnaldo","Arne","Arno","Arnold","Arnoldo","Arnulfo","Aron","Art","Arthur","Arturo","Arvel","Arvid","Arvilla","Aryanna","Asa","Asha","Ashlee","Ashleigh","Ashley","Ashly","Ashlynn","Ashton","Ashtyn","Asia","Assunta","Astrid","Athena","Aubree","Aubrey","Audie","Audra","Audreanne","Audrey","August","Augusta","Augustine","Augustus","Aurelia","Aurelie","Aurelio","Aurore","Austen","Austin","Austyn","Autumn","Ava","Avery","Avis","Axel","Ayana","Ayden","Ayla","Aylin","Baby","Bailee","Bailey","Barbara","Barney","Baron","Barrett","Barry","Bart","Bartholome","Barton","Baylee","Beatrice","Beau","Beaulah","Bell","Bella","Belle","Ben","Benedict","Benjamin","Bennett","Bennie","Benny","Benton","Berenice","Bernadette","Bernadine","Bernard","Bernardo","Berneice","Bernhard","Bernice","Bernie","Berniece","Bernita","Berry","Bert","Berta","Bertha","Bertram","Bertrand","Beryl","Bessie","Beth","Bethany","Bethel","Betsy","Bette","Bettie","Betty","Bettye","Beulah","Beverly","Bianka","Bill","Billie","Billy","Birdie","Blair","Blaise","Blake","Blanca","Blanche","Blaze","Bo","Bobbie","Bobby","Bonita","Bonnie","Boris","Boyd","Brad","Braden","Bradford","Bradley","Bradly","Brady","Braeden","Brain","Brandi","Brando","Brandon","Brandt","Brandy","Brandyn","Brannon","Branson","Brant","Braulio","Braxton","Brayan","Breana","Breanna","Breanne","Brenda","Brendan","Brenden","Brendon","Brenna","Brennan","Brennon","Brent","Bret","Brett","Bria","Brian","Briana","Brianne","Brice","Bridget","Bridgette","Bridie","Brielle","Brigitte","Brionna","Brisa","Britney","Brittany","Brock","Broderick","Brody","Brook","Brooke","Brooklyn","Brooks","Brown","Bruce","Bryana","Bryce","Brycen","Bryon","Buck","Bud","Buddy","Buford","Bulah","Burdette","Burley","Burnice","Buster","Cade","Caden","Caesar","Caitlyn","Cale","Caleb","Caleigh","Cali","Calista","Callie","Camden","Cameron","Camila","Camilla","Camille","Camren","Camron","Camryn","Camylle","Candace","Candelario","Candice","Candida","Candido","Cara","Carey","Carissa","Carlee","Carleton","Carley","Carli","Carlie","Carlo","Carlos","Carlotta","Carmel","Carmela","Carmella","Carmelo","Carmen","Carmine","Carol","Carolanne","Carole","Carolina","Caroline","Carolyn","Carolyne","Carrie","Carroll","Carson","Carter","Cary","Casandra","Casey","Casimer","Casimir","Casper","Cassandra","Cassandre","Cassidy","Cassie","Catalina","Caterina","Catharine","Catherine","Cathrine","Cathryn","Cathy","Cayla","Ceasar","Cecelia","Cecil","Cecile","Cecilia","Cedrick","Celestine","Celestino","Celia","Celine","Cesar","Chad","Chadd","Chadrick","Chaim","Chance","Chandler","Chanel","Chanelle","Charity","Charlene","Charles","Charley","Charlie","Charlotte","Chase","Chasity","Chauncey","Chaya","Chaz","Chelsea","Chelsey","Chelsie","Chesley","Chester","Chet","Cheyanne","Cheyenne","Chloe","Chris","Christ","Christa","Christelle","Christian","Christiana","Christina","Christine","Christop","Christophe","Christopher","Christy","Chyna","Ciara","Cicero","Cielo","Cierra","Cindy","Citlalli","Clair","Claire","Clara","Clarabelle","Clare","Clarissa","Clark","Claud","Claude","Claudia","Claudie","Claudine","Clay","Clemens","Clement","Clementina","Clementine","Clemmie","Cleo","Cleora","Cleta","Cletus","Cleve","Cleveland","Clifford","Clifton","Clint","Clinton","Clotilde","Clovis","Cloyd","Clyde","Coby","Cody","Colby","Cole","Coleman","Colin","Colleen","Collin","Colt","Colten","Colton","Columbus","Concepcion","Conner","Connie","Connor","Conor","Conrad","Constance","Constantin","Consuelo","Cooper","Cora","Coralie","Corbin","Cordelia","Cordell","Cordia","Cordie","Corene","Corine","Cornelius","Cornell","Corrine","Cortez","Cortney","Cory","Coty","Courtney","Coy","Craig","Crawford","Creola","Cristal","Cristian","Cristina","Cristobal","Cristopher","Cruz","Crystal","Crystel","Cullen","Curt","Curtis","Cydney","Cynthia","Cyril","Cyrus","Dagmar","Dahlia","Daija","Daisha","Daisy","Dakota","Dale","Dallas","Dallin","Dalton","Damaris","Dameon","Damian","Damien","Damion","Damon","Dan","Dana","Dandre","Dane","D'angelo","Dangelo","Danial","Daniela","Daniella","Danielle","Danika","Dannie","Danny","Dante","Danyka","Daphne","Daphnee","Daphney","Darby","Daren","Darian","Dariana","Darien","Dario","Darion","Darius","Darlene","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darrion","Darron","Darryl","Darwin","Daryl","Dashawn","Dasia","Dave","David","Davin","Davion","Davon","Davonte","Dawn","Dawson","Dax","Dayana","Dayna","Dayne","Dayton","Dean","Deangelo","Deanna","Deborah","Declan","Dedric","Dedrick","Dee","Deion","Deja","Dejah","Dejon","Dejuan","Delaney","Delbert","Delfina","Delia","Delilah","Dell","Della","Delmer","Delores","Delpha","Delphia","Delphine","Delta","Demarco","Demarcus","Demario","Demetris","Demetrius","Demond","Dena","Denis","Dennis","Deon","Deondre","Deontae","Deonte","Dereck","Derek","Derick","Deron","Derrick","Deshaun","Deshawn","Desiree","Desmond","Dessie","Destany","Destin","Destinee","Destiney","Destini","Destiny","Devan","Devante","Deven","Devin","Devon","Devonte","Devyn","Dewayne","Dewitt","Dexter","Diamond","Diana","Dianna","Diego","Dillan","Dillon","Dimitri","Dina","Dino","Dion","Dixie","Dock","Dolly","Dolores","Domenic","Domenica","Domenick","Domenico","Domingo","Dominic","Dominique","Don","Donald","Donato","Donavon","Donna","Donnell","Donnie","Donny","Dora","Dorcas","Dorian","Doris","Dorothea","Dorothy","Dorris","Dortha","Dorthy","Doug","Douglas","Dovie","Doyle","Drake","Drew","Duane","Dudley","Dulce","Duncan","Durward","Dustin","Dusty","Dwight","Dylan","Earl","Earlene","Earline","Earnest","Earnestine","Easter","Easton","Ebba","Ebony","Ed","Eda","Edd","Eddie","Eden","Edgar","Edgardo","Edison","Edmond","Edmund","Edna","Eduardo","Edward","Edwardo","Edwin","Edwina","Edyth","Edythe","Effie","Efrain","Efren","Eileen","Einar","Eino","Eladio","Elaina","Elbert","Elda","Eldon","Eldora","Eldred","Eldridge","Eleanora","Eleanore","Eleazar","Electa","Elena","Elenor","Elenora","Eleonore","Elfrieda","Eli","Elian","Eliane","Elias","Eliezer","Elijah","Elinor","Elinore","Elisa","Elisabeth","Elise","Eliseo","Elisha","Elissa","Eliza","Elizabeth","Ella","Ellen","Ellie","Elliot","Elliott","Ellis","Ellsworth","Elmer","Elmira","Elmo","Elmore","Elna","Elnora","Elody","Eloisa","Eloise","Elouise","Eloy","Elroy","Elsa","Else","Elsie","Elta","Elton","Elva","Elvera","Elvie","Elvis","Elwin","Elwyn","Elyse","Elyssa","Elza","Emanuel","Emelia","Emelie","Emely","Emerald","Emerson","Emery","Emie","Emil","Emile","Emilia","Emiliano","Emilie","Emilio","Emily","Emma","Emmalee","Emmanuel","Emmanuelle","Emmet","Emmett","Emmie","Emmitt","Emmy","Emory","Ena","Enid","Enoch","Enola","Enos","Enrico","Enrique","Ephraim","Era","Eriberto","Eric","Erica","Erich","Erick","Ericka","Erik","Erika","Erin","Erling","Erna","Ernest","Ernestina","Ernestine","Ernesto","Ernie","Ervin","Erwin","Eryn","Esmeralda","Esperanza","Esta","Esteban","Estefania","Estel","Estell","Estella","Estelle","Estevan","Esther","Estrella","Etha","Ethan","Ethel","Ethelyn","Ethyl","Ettie","Eudora","Eugene","Eugenia","Eula","Eulah","Eulalia","Euna","Eunice","Eusebio","Eva","Evalyn","Evan","Evangeline","Evans","Eve","Eveline","Evelyn","Everardo","Everett","Everette","Evert","Evie","Ewald","Ewell","Ezekiel","Ezequiel","Ezra","Fabian","Fabiola","Fae","Fannie","Fanny","Fatima","Faustino","Fausto","Favian","Fay","Faye","Federico","Felicia","Felicita","Felicity","Felipa","Felipe","Felix","Felton","Fermin","Fern","Fernando","Ferne","Fidel","Filiberto","Filomena","Finn","Fiona","Flavie","Flavio","Fleta","Fletcher","Flo","Florence","Florencio","Florian","Florida","Florine","Flossie","Floy","Floyd","Ford","Forest","Forrest","Foster","Frances","Francesca","Francesco","Francis","Francisca","Francisco","Franco","Frank","Frankie","Franz","Fred","Freda","Freddie","Freddy","Frederic","Frederick","Frederik","Frederique","Fredrick","Fredy","Freeda","Freeman","Freida","Frida","Frieda","Friedrich","Fritz","Furman","Gabe","Gabriel","Gabriella","Gabrielle","Gaetano","Gage","Gail","Gardner","Garett","Garfield","Garland","Garnet","Garnett","Garret","Garrett","Garrick","Garrison","Garry","Garth","Gaston","Gavin","Gay","Gayle","Gaylord","Gene","General","Genesis","Genevieve","Gennaro","Genoveva","Geo","Geoffrey","George","Georgette","Georgiana","Georgianna","Geovanni","Geovanny","Geovany","Gerald","Geraldine","Gerard","Gerardo","Gerda","Gerhard","Germaine","German","Gerry","Gerson","Gertrude","Gia","Gianni","Gideon","Gilbert","Gilberto","Gilda","Giles","Gillian","Gina","Gino","Giovani","Giovanna","Giovanni","Giovanny","Gisselle","Giuseppe","Gladyce","Gladys","Glen","Glenda","Glenna","Glennie","Gloria","Godfrey","Golda","Golden","Gonzalo","Gordon","Grace","Gracie","Graciela","Grady","Graham","Grant","Granville","Grayce","Grayson","Green","Greg","Gregg","Gregoria","Gregorio","Gregory","Greta","Gretchen","Greyson","Griffin","Grover","Guadalupe","Gudrun","Guido","Guillermo","Guiseppe","Gunnar","Gunner","Gus","Gussie","Gust","Gustave","Guy","Gwen","Gwendolyn","Hadley","Hailee","Hailey","Hailie","Hal","Haleigh","Haley","Halie","Halle","Hallie","Hank","Hanna","Hannah","Hans","Hardy","Harley","Harmon","Harmony","Harold","Harrison","Harry","Harvey","Haskell","Hassan","Hassie","Hattie","Haven","Hayden","Haylee","Hayley","Haylie","Hazel","Hazle","Heath","Heather","Heaven","Heber","Hector","Heidi","Helen","Helena","Helene","Helga","Hellen","Helmer","Heloise","Henderson","Henri","Henriette","Henry","Herbert","Herman","Hermann","Hermina","Herminia","Herminio","Hershel","Herta","Hertha","Hester","Hettie","Hilario","Hilbert","Hilda","Hildegard","Hillard","Hillary","Hilma","Hilton","Hipolito","Hiram","Hobart","Holden","Hollie","Hollis","Holly","Hope","Horace","Horacio","Hortense","Hosea","Houston","Howard","Howell","Hoyt","Hubert","Hudson","Hugh","Hulda","Humberto","Hunter","Hyman","Ian","Ibrahim","Icie","Ida","Idell","Idella","Ignacio","Ignatius","Ike","Ila","Ilene","Iliana","Ima","Imani","Imelda","Immanuel","Imogene","Ines","Irma","Irving","Irwin","Isaac","Isabel","Isabell","Isabella","Isabelle","Isac","Isadore","Isai","Isaiah","Isaias","Isidro","Ismael","Isobel","Isom","Israel","Issac","Itzel","Iva","Ivah","Ivory","Ivy","Izabella","Izaiah","Jabari","Jace","Jacey","Jacinthe","Jacinto","Jack","Jackeline","Jackie","Jacklyn","Jackson","Jacky","Jaclyn","Jacquelyn","Jacques","Jacynthe","Jada","Jade","Jaden","Jadon","Jadyn","Jaeden","Jaida","Jaiden","Jailyn","Jaime","Jairo","Jakayla","Jake","Jakob","Jaleel","Jalen","Jalon","Jalyn","Jamaal","Jamal","Jamar","Jamarcus","Jamel","Jameson","Jamey","Jamie","Jamil","Jamir","Jamison","Jammie","Jan","Jana","Janae","Jane","Janelle","Janessa","Janet","Janice","Janick","Janie","Janis","Janiya","Jannie","Jany","Jaquan","Jaquelin","Jaqueline","Jared","Jaren","Jarod","Jaron","Jarred","Jarrell","Jarret","Jarrett","Jarrod","Jarvis","Jasen","Jasmin","Jason","Jasper","Jaunita","Javier","Javon","Javonte","Jay","Jayce","Jaycee","Jayda","Jayde","Jayden","Jaydon","Jaylan","Jaylen","Jaylin","Jaylon","Jayme","Jayne","Jayson","Jazlyn","Jazmin","Jazmyn","Jazmyne","Jean","Jeanette","Jeanie","Jeanne","Jed","Jedediah","Jedidiah","Jeff","Jefferey","Jeffery","Jeffrey","Jeffry","Jena","Jenifer","Jennie","Jennifer","Jennings","Jennyfer","Jensen","Jerad","Jerald","Jeramie","Jeramy","Jerel","Jeremie","Jeremy","Jermain","Jermaine","Jermey","Jerod","Jerome","Jeromy","Jerrell","Jerrod","Jerrold","Jerry","Jess","Jesse","Jessica","Jessie","Jessika","Jessy","Jessyca","Jesus","Jett","Jettie","Jevon","Jewel","Jewell","Jillian","Jimmie","Jimmy","Jo","Joan","Joana","Joanie","Joanne","Joannie","Joanny","Joany","Joaquin","Jocelyn","Jodie","Jody","Joe","Joel","Joelle","Joesph","Joey","Johan","Johann","Johanna","Johathan","John","Johnathan","Johnathon","Johnnie","Johnny","Johnpaul","Johnson","Jolie","Jon","Jonas","Jonatan","Jonathan","Jonathon","Jordan","Jordane","Jordi","Jordon","Jordy","Jordyn","Jorge","Jose","Josefa","Josefina","Joseph","Josephine","Josh","Joshua","Joshuah","Josiah","Josiane","Josianne","Josie","Josue","Jovan","Jovani","Jovanny","Jovany","Joy","Joyce","Juana","Juanita","Judah","Judd","Jude","Judge","Judson","Judy","Jules","Julia","Julian","Juliana","Julianne","Julie","Julien","Juliet","Julio","Julius","June","Junior","Junius","Justen","Justice","Justina","Justine","Juston","Justus","Justyn","Juvenal","Juwan","Kacey","Kaci","Kacie","Kade","Kaden","Kadin","Kaela","Kaelyn","Kaia","Kailee","Kailey","Kailyn","Kaitlin","Kaitlyn","Kale","Kaleb","Kaleigh","Kaley","Kali","Kallie","Kameron","Kamille","Kamren","Kamron","Kamryn","Kane","Kara","Kareem","Karelle","Karen","Kari","Kariane","Karianne","Karina","Karine","Karl","Karlee","Karley","Karli","Karlie","Karolann","Karson","Kasandra","Kasey","Kassandra","Katarina","Katelin","Katelyn","Katelynn","Katharina","Katherine","Katheryn","Kathleen","Kathlyn","Kathryn","Kathryne","Katlyn","Katlynn","Katrina","Katrine","Kattie","Kavon","Kay","Kaya","Kaycee","Kayden","Kayla","Kaylah","Kaylee","Kayleigh","Kayley","Kayli","Kaylie","Kaylin","Keagan","Keanu","Keara","Keaton","Keegan","Keeley","Keely","Keenan","Keira","Keith","Kellen","Kelley","Kelli","Kellie","Kelly","Kelsi","Kelsie","Kelton","Kelvin","Ken","Kendall","Kendra","Kendrick","Kenna","Kennedi","Kennedy","Kenneth","Kennith","Kenny","Kenton","Kenya","Kenyatta","Kenyon","Keon","Keshaun","Keshawn","Keven","Kevin","Kevon","Keyon","Keyshawn","Khalid","Khalil","Kian","Kiana","Kianna","Kiara","Kiarra","Kiel","Kiera","Kieran","Kiley","Kim","Kimberly","King","Kip","Kira","Kirk","Kirsten","Kirstin","Kitty","Kobe","Koby","Kody","Kolby","Kole","Korbin","Korey","Kory","Kraig","Kris","Krista","Kristian","Kristin","Kristina","Kristofer","Kristoffer","Kristopher","Kristy","Krystal","Krystel","Krystina","Kurt","Kurtis","Kyla","Kyle","Kylee","Kyleigh","Kyler","Kylie","Kyra","Lacey","Lacy","Ladarius","Lafayette","Laila","Laisha","Lamar","Lambert","Lamont","Lance","Landen","Lane","Laney","Larissa","Laron","Larry","Larue","Laura","Laurel","Lauren","Laurence","Lauretta","Lauriane","Laurianne","Laurie","Laurine","Laury","Lauryn","Lavada","Lavern","Laverna","Laverne","Lavina","Lavinia","Lavon","Lavonne","Lawrence","Lawson","Layla","Layne","Lazaro","Lea","Leann","Leanna","Leanne","Leatha","Leda","Lee","Leif","Leila","Leilani","Lela","Lelah","Leland","Lelia","Lempi","Lemuel","Lenna","Lennie","Lenny","Lenora","Lenore","Leo","Leola","Leon","Leonard","Leonardo","Leone","Leonel","Leonie","Leonor","Leonora","Leopold","Leopoldo","Leora","Lera","Lesley","Leslie","Lesly","Lessie","Lester","Leta","Letha","Letitia","Levi","Lew","Lewis","Lexi","Lexie","Lexus","Lia","Liam","Liana","Libbie","Libby","Lila","Lilian","Liliana","Liliane","Lilla","Lillian","Lilliana","Lillie","Lilly","Lily","Lilyan","Lina","Lincoln","Linda","Lindsay","Lindsey","Linnea","Linnie","Linwood","Lionel","Lisa","Lisandro","Lisette","Litzy","Liza","Lizeth","Lizzie","Llewellyn","Lloyd","Logan","Lois","Lola","Lolita","Loma","Lon","London","Lonie","Lonnie","Lonny","Lonzo","Lora","Loraine","Loren","Lorena","Lorenz","Lorenza","Lorenzo","Lori","Lorine","Lorna","Lottie","Lou","Louie","Louisa","Lourdes","Louvenia","Lowell","Loy","Loyal","Loyce","Lucas","Luciano","Lucie","Lucienne","Lucile","Lucinda","Lucio","Lucious","Lucius","Lucy","Ludie","Ludwig","Lue","Luella","Luigi","Luis","Luisa","Lukas","Lula","Lulu","Luna","Lupe","Lura","Lurline","Luther","Luz","Lyda","Lydia","Lyla","Lynn","Lyric","Lysanne","Mabel","Mabelle","Mable","Mac","Macey","Maci","Macie","Mack","Mackenzie","Macy","Madaline","Madalyn","Maddison","Madeline","Madelyn","Madelynn","Madge","Madie","Madilyn","Madisen","Madison","Madisyn","Madonna","Madyson","Mae","Maegan","Maeve","Mafalda","Magali","Magdalen","Magdalena","Maggie","Magnolia","Magnus","Maia","Maida","Maiya","Major","Makayla","Makenna","Makenzie","Malachi","Malcolm","Malika","Malinda","Mallie","Mallory","Malvina","Mandy","Manley","Manuel","Manuela","Mara","Marc","Marcel","Marcelina","Marcelino","Marcella","Marcelle","Marcellus","Marcelo","Marcia","Marco","Marcos","Marcus","Margaret","Margarete","Margarett","Margaretta","Margarette","Margarita","Marge","Margie","Margot","Margret","Marguerite","Maria","Mariah","Mariam","Marian","Mariana","Mariane","Marianna","Marianne","Mariano","Maribel","Marie","Mariela","Marielle","Marietta","Marilie","Marilou","Marilyne","Marina","Mario","Marion","Marisa","Marisol","Maritza","Marjolaine","Marjorie","Marjory","Mark","Markus","Marlee","Marlen","Marlene","Marley","Marlin","Marlon","Marques","Marquis","Marquise","Marshall","Marta","Martin","Martina","Martine","Marty","Marvin","Mary","Maryam","Maryjane","Maryse","Mason","Mateo","Mathew","Mathias","Mathilde","Matilda","Matilde","Matt","Matteo","Mattie","Maud","Maude","Maudie","Maureen","Maurice","Mauricio","Maurine","Maverick","Mavis","Max","Maxie","Maxime","Maximilian","Maximillia","Maximillian","Maximo","Maximus","Maxine","Maxwell","May","Maya","Maybell","Maybelle","Maye","Maymie","Maynard","Mayra","Mazie","Mckayla","Mckenna","Mckenzie","Meagan","Meaghan","Meda","Megane","Meggie","Meghan","Mekhi","Melany","Melba","Melisa","Melissa","Mellie","Melody","Melvin","Melvina","Melyna","Melyssa","Mercedes","Meredith","Merl","Merle","Merlin","Merritt","Mertie","Mervin","Meta","Mia","Micaela","Micah","Michael","Michaela","Michale","Micheal","Michel","Michele","Michelle","Miguel","Mikayla","Mike","Mikel","Milan","Miles","Milford","Miller","Millie","Milo","Milton","Mina","Minerva","Minnie","Miracle","Mireille","Mireya","Misael","Missouri","Misty","Mitchel","Mitchell","Mittie","Modesta","Modesto","Mohamed","Mohammad","Mohammed","Moises","Mollie","Molly","Mona","Monica","Monique","Monroe","Monserrat","Monserrate","Montana","Monte","Monty","Morgan","Moriah","Morris","Mortimer","Morton","Mose","Moses","Moshe","Mossie","Mozell","Mozelle","Muhammad","Muriel","Murl","Murphy","Murray","Mustafa","Mya","Myah","Mylene","Myles","Myra","Myriam","Myrl","Myrna","Myron","Myrtice","Myrtie","Myrtis","Myrtle","Nadia","Nakia","Name","Nannie","Naomi","Naomie","Napoleon","Narciso","Nash","Nasir","Nat","Natalia","Natalie","Natasha","Nathan","Nathanael","Nathanial","Nathaniel","Nathen","Nayeli","Neal","Ned","Nedra","Neha","Neil","Nelda","Nella","Nelle","Nellie","Nels","Nelson","Neoma","Nestor","Nettie","Neva","Newell","Newton","Nia","Nicholas","Nicholaus","Nichole","Nick","Nicklaus","Nickolas","Nico","Nicola","Nicolas","Nicole","Nicolette","Nigel","Nikita","Nikki","Nikko","Niko","Nikolas","Nils","Nina","Noah","Noble","Noe","Noel","Noelia","Noemi","Noemie","Noemy","Nola","Nolan","Nona","Nora","Norbert","Norberto","Norene","Norma","Norris","Norval","Norwood","Nova","Novella","Nya","Nyah","Nyasia","Obie","Oceane","Ocie","Octavia","Oda","Odell","Odessa","Odie","Ofelia","Okey","Ola","Olaf","Ole","Olen","Oleta","Olga","Olin","Oliver","Ollie","Oma","Omari","Omer","Ona","Onie","Opal","Ophelia","Ora","Oral","Oran","Oren","Orie","Orin","Orion","Orland","Orlando","Orlo","Orpha","Orrin","Orval","Orville","Osbaldo","Osborne","Oscar","Osvaldo","Oswald","Oswaldo","Otha","Otho","Otilia","Otis","Ottilie","Ottis","Otto","Ova","Owen","Ozella","Pablo","Paige","Palma","Pamela","Pansy","Paolo","Paris","Parker","Pascale","Pasquale","Pat","Patience","Patricia","Patrick","Patsy","Pattie","Paul","Paula","Pauline","Paxton","Payton","Pearl","Pearlie","Pearline","Pedro","Peggie","Penelope","Percival","Percy","Perry","Pete","Peter","Petra","Peyton","Philip","Phoebe","Phyllis","Pierce","Pierre","Pietro","Pink","Pinkie","Piper","Polly","Porter","Precious","Presley","Preston","Price","Prince","Princess","Priscilla","Providenci","Prudence","Queen","Queenie","Quentin","Quincy","Quinn","Quinten","Quinton","Rachael","Rachel","Rachelle","Rae","Raegan","Rafael","Rafaela","Raheem","Rahsaan","Rahul","Raina","Raleigh","Ralph","Ramiro","Ramon","Ramona","Randal","Randall","Randi","Randy","Ransom","Raoul","Raphael","Raphaelle","Raquel","Rashad","Rashawn","Rasheed","Raul","Raven","Ray","Raymond","Raymundo","Reagan","Reanna","Reba","Rebeca","Rebecca","Rebeka","Rebekah","Reece","Reed","Reese","Regan","Reggie","Reginald","Reid","Reilly","Reina","Reinhold","Remington","Rene","Renee","Ressie","Reta","Retha","Retta","Reuben","Reva","Rex","Rey","Reyes","Reymundo","Reyna","Reynold","Rhea","Rhett","Rhianna","Rhiannon","Rhoda","Ricardo","Richard","Richie","Richmond","Rick","Rickey","Rickie","Ricky","Rico","Rigoberto","Riley","Rita","River","Robb","Robbie","Robert","Roberta","Roberto","Robin","Robyn","Rocio","Rocky","Rod","Roderick","Rodger","Rodolfo","Rodrick","Rodrigo","Roel","Rogelio","Roger","Rogers","Rolando","Rollin","Roma","Romaine","Roman","Ron","Ronaldo","Ronny","Roosevelt","Rory","Rosa","Rosalee","Rosalia","Rosalind","Rosalinda","Rosalyn","Rosamond","Rosanna","Rosario","Roscoe","Rose","Rosella","Roselyn","Rosemarie","Rosemary","Rosendo","Rosetta","Rosie","Rosina","Roslyn","Ross","Rossie","Rowan","Rowena","Rowland","Roxane","Roxanne","Roy","Royal","Royce","Rozella","Ruben","Rubie","Ruby","Rubye","Rudolph","Rudy","Rupert","Russ","Russel","Russell","Rusty","Ruth","Ruthe","Ruthie","Ryan","Ryann","Ryder","Rylan","Rylee","Ryleigh","Ryley","Sabina","Sabrina","Sabryna","Sadie","Sadye","Sage","Saige","Sallie","Sally","Salma","Salvador","Salvatore","Sam","Samanta","Samantha","Samara","Samir","Sammie","Sammy","Samson","Sandra","Sandrine","Sandy","Sanford","Santa","Santiago","Santina","Santino","Santos","Sarah","Sarai","Sarina","Sasha","Saul","Savanah","Savanna","Savannah","Savion","Scarlett","Schuyler","Scot","Scottie","Scotty","Seamus","Sean","Sebastian","Sedrick","Selena","Selina","Selmer","Serena","Serenity","Seth","Shad","Shaina","Shakira","Shana","Shane","Shanel","Shanelle","Shania","Shanie","Shaniya","Shanna","Shannon","Shanny","Shanon","Shany","Sharon","Shaun","Shawn","Shawna","Shaylee","Shayna","Shayne","Shea","Sheila","Sheldon","Shemar","Sheridan","Sherman","Sherwood","Shirley","Shyann","Shyanne","Sibyl","Sid","Sidney","Sienna","Sierra","Sigmund","Sigrid","Sigurd","Silas","Sim","Simeon","Simone","Sincere","Sister","Skye","Skyla","Skylar","Sofia","Soledad","Solon","Sonia","Sonny","Sonya","Sophia","Sophie","Spencer","Stacey","Stacy","Stan","Stanford","Stanley","Stanton","Stefan","Stefanie","Stella","Stephan","Stephania","Stephanie","Stephany","Stephen","Stephon","Sterling","Steve","Stevie","Stewart","Stone","Stuart","Summer","Sunny","Susan","Susana","Susanna","Susie","Suzanne","Sven","Syble","Sydnee","Sydney","Sydni","Sydnie","Sylvan","Sylvester","Sylvia","Tabitha","Tad","Talia","Talon","Tamara","Tamia","Tania","Tanner","Tanya","Tara","Taryn","Tate","Tatum","Tatyana","Taurean","Tavares","Taya","Taylor","Teagan","Ted","Telly","Terence","Teresa","Terrance","Terrell","Terrence","Terrill","Terry","Tess","Tessie","Tevin","Thad","Thaddeus","Thalia","Thea","Thelma","Theo","Theodora","Theodore","Theresa","Therese","Theresia","Theron","Thomas","Thora","Thurman","Tia","Tiana","Tianna","Tiara","Tierra","Tiffany","Tillman","Timmothy","Timmy","Timothy","Tina","Tito","Titus","Tobin","Toby","Tod","Tom","Tomas","Tomasa","Tommie","Toney","Toni","Tony","Torey","Torrance","Torrey","Toy","Trace","Tracey","Tracy","Travis","Travon","Tre","Tremaine","Tremayne","Trent","Trenton","Tressa","Tressie","Treva","Trever","Trevion","Trevor","Trey","Trinity","Trisha","Tristian","Tristin","Triston","Troy","Trudie","Trycia","Trystan","Turner","Twila","Tyler","Tyra","Tyree","Tyreek","Tyrel","Tyrell","Tyrese","Tyrique","Tyshawn","Tyson","Ubaldo","Ulices","Ulises","Una","Unique","Urban","Uriah","Uriel","Ursula","Vada","Valentin","Valentina","Valentine","Valerie","Vallie","Van","Vance","Vanessa","Vaughn","Veda","Velda","Vella","Velma","Velva","Vena","Verda","Verdie","Vergie","Verla","Verlie","Vern","Verna","Verner","Vernice","Vernie","Vernon","Verona","Veronica","Vesta","Vicenta","Vicente","Vickie","Vicky","Victor","Victoria","Vida","Vidal","Vilma","Vince","Vincent","Vincenza","Vincenzo","Vinnie","Viola","Violet","Violette","Virgie","Virgil","Virginia","Virginie","Vita","Vito","Viva","Vivian","Viviane","Vivianne","Vivien","Vivienne","Vladimir","Wade","Waino","Waldo","Walker","Wallace","Walter","Walton","Wanda","Ward","Warren","Watson","Wava","Waylon","Wayne","Webster","Weldon","Wellington","Wendell","Wendy","Werner","Westley","Weston","Whitney","Wilber","Wilbert","Wilburn","Wiley","Wilford","Wilfred","Wilfredo","Wilfrid","Wilhelm","Wilhelmine","Will","Willa","Willard","William","Willie","Willis","Willow","Willy","Wilma","Wilmer","Wilson","Wilton","Winfield","Winifred","Winnifred","Winona","Winston","Woodrow","Wyatt","Wyman","Xander","Xavier","Xzavier","Yadira","Yasmeen","Yasmin","Yasmine","Yazmin","Yesenia","Yessenia","Yolanda","Yoshiko","Yvette","Yvonne","Zachariah","Zachary","Zachery","Zack","Zackary","Zackery","Zakary","Zander","Zane","Zaria","Zechariah","Zelda","Zella","Zelma","Zena","Zetta","Zion","Zita","Zoe","Zoey","Zoie","Zoila","Zola","Zora","Zul"];};
-
-Faker.definitions.last_name = function (){return["Abbott","Abernathy","Abshire","Adams","Altenwerth","Anderson","Ankunding","Armstrong","Auer","Aufderhar","Bahringer","Bailey","Balistreri","Barrows","Bartell","Bartoletti","Barton","Bashirian","Batz","Bauch","Baumbach","Bayer","Beahan","Beatty","Bechtelar","Becker","Bednar","Beer","Beier","Berge","Bergnaum","Bergstrom","Bernhard","Bernier","Bins","Blanda","Blick","Block","Bode","Boehm","Bogan","Bogisich","Borer","Bosco","Botsford","Boyer","Boyle","Bradtke","Brakus","Braun","Breitenberg","Brekke","Brown","Bruen","Buckridge","Carroll","Carter","Cartwright","Casper","Cassin","Champlin","Christiansen","Cole","Collier","Collins","Conn","Connelly","Conroy","Considine","Corkery","Cormier","Corwin","Cremin","Crist","Crona","Cronin","Crooks","Cruickshank","Cummerata","Cummings","Dach","D'Amore","Daniel","Dare","Daugherty","Davis","Deckow","Denesik","Dibbert","Dickens","Dicki","Dickinson","Dietrich","Donnelly","Dooley","Douglas","Doyle","DuBuque","Durgan","Ebert","Effertz","Eichmann","Emard","Emmerich","Erdman","Ernser","Fadel","Fahey","Farrell","Fay","Feeney","Feest","Feil","Ferry","Fisher","Flatley","Frami","Franecki","Friesen","Fritsch","Funk","Gaylord","Gerhold","Gerlach","Gibson","Gislason","Gleason","Gleichner","Glover","Goldner","Goodwin","Gorczany","Gottlieb","Goyette","Grady","Graham","Grant","Green","Greenfelder","Greenholt","Grimes","Gulgowski","Gusikowski","Gutkowski","Guªann","Haag","Hackett","Hagenes","Hahn","Haley","Halvorson","Hamill","Hammes","Hand","Hane","Hansen","Harber","Harris","Harªann","Harvey","Hauck","Hayes","Heaney","Heathcote","Hegmann","Heidenreich","Heller","Herman","Hermann","Hermiston","Herzog","Hessel","Hettinger","Hickle","Hilll","Hills","Hilpert","Hintz","Hirthe","Hodkiewicz","Hoeger","Homenick","Hoppe","Howe","Howell","Hudson","Huel","Huels","Hyatt","Jacobi","Jacobs","Jacobson","Jakubowski","Jaskolski","Jast","Jenkins","Jerde","Jewess","Johns","Johnson","Johnston","Jones","Kassulke","Kautzer","Keebler","Keeling","Kemmer","Kerluke","Kertzmann","Kessler","Kiehn","Kihn","Kilback","King","Kirlin","Klein","Kling","Klocko","Koch","Koelpin","Koepp","Kohler","Konopelski","Koss","Kovacek","Kozey","Krajcik","Kreiger","Kris","Kshlerin","Kub","Kuhic","Kuhlman","Kuhn","Kulas","Kunde","Kunze","Kuphal","Kutch","Kuvalis","Labadie","Lakin","Lang","Langosh","Langworth","Larkin","Larson","Leannon","Lebsack","Ledner","Leffler","Legros","Lehner","Lemke","Lesch","Leuschke","Lind","Lindgren","Littel","Little","Lockman","Lowe","Lubowitz","Lueilwitz","Luettgen","Lynch","Macejkovic","Maggio","Mann","Mante","Marks","Marquardt","Marvin","Mayer","Mayert","McClure","McCullough","McDermott","McGlynn","McKenzie","McLaughlin","Medhurst","Mertz","Metz","Miller","Mills","Mitchell","Moen","Mohr","Monahan","Moore","Morar","Morissette","Mosciski","Mraz","Mueller","Muller","Murazik","Murphy","Murray","Nader","Nicolas","Nienow","Nikolaus","Nitzsche","Nolan","Oberbrunner","O'Connell","O'Conner","O'Hara","O'Keefe","O'Kon","Okuneva","Olson","Ondricka","O'Reilly","Orn","Ortiz","Osinski","Pacocha","Padberg","Pagac","Parisian","Parker","Paucek","Pfannerstill","Pfeffer","Pollich","Pouros","Powlowski","Predovic","Price","Prohaska","Prosacco","Purdy","Quigley","Quitzon","Rath","Ratke","Rau","Raynor","Reichel","Reichert","Reilly","Reinger","Rempel","Renner","Reynolds","Rice","Rippin","Ritchie","Robel","Roberts","Rodriguez","Rogahn","Rohan","Rolfson","Romaguera","Roob","Rosenbaum","Rowe","Ruecker","Runolfsdottir","Runolfsson","Runte","Russel","Rutherford","Ryan","Sanford","Satterfield","Sauer","Sawayn","Schaden","Schaefer","Schamberger","Schiller","Schimmel","Schinner","Schmeler","Schmidt","Schmitt","Schneider","Schoen","Schowalter","Schroeder","Schulist","Schultz","Schumm","Schuppe","Schuster","Senger","Shanahan","Shields","Simonis","Sipes","Skiles","Smith","Smitham","Spencer","Spinka","Sporer","Stamm","Stanton","Stark","Stehr","Steuber","Stiedemann","Stokes","Stoltenberg","Stracke","Streich","Stroman","Strosin","Swaniawski","Swift","Terry","Thiel","Thompson","Tillman","Torp","Torphy","Towne","Toy","Trantow","Tremblay","Treutel","Tromp","Turcotte","Turner","Ullrich","Upton","Vandervort","Veum","Volkman","Von","VonRueden","Waelchi","Walker","Walsh","Walter","Ward","Waters","Watsica","Weber","Wehner","Weimann","Weissnat","Welch","West","White","Wiegand","Wilderman","Wilkinson","Will","Williamson","Willms","Windler","Wintheiser","Wisoky","Wisozk","Witting","Wiza","Wolf","Wolff","Wuckert","Wunsch","Wyman","Yost","Yundt","Zboncak","Zemlak","Ziemann","Zieme","Zulauf"];};
-
-Faker.definitions.name_prefix = function (){return ["Mr.", "Mrs.", "Ms.", "Miss", "Dr."];};
-
-Faker.definitions.name_suffix = function (){return ["Jr.", "Sr.", "I", "II", "III", "IV", "V", "MD", "DDS", "PhD", "DVM"];};
-
-Faker.definitions.br_state = function () {
- return [
- 'Acre',
- 'Alagoas',
- 'Amapá',
- 'Amazonas',
- 'Bahia',
- 'Ceará',
- 'Distrito Federal',
- 'Espírito Santo',
- 'Goiás',
- 'Maranhão',
- 'Mato Grosso',
- 'Mato Grosso do Sul',
- 'Minas Gerais',
- 'Paraná',
- 'Paraíba',
- 'Pará',
- 'Pernambuco',
- 'Piauí',
- 'Rio de Janeiro',
- 'Rio Grande do Norte',
- 'Rio Grande do Sul',
- 'Rondônia',
- 'Roraima',
- 'Santa Catarina',
- 'Sergipe',
- 'São Paulo',
- 'Tocantins'
- ];
-};
+Faker.definitions.name_suffix = ["Jr.","Sr.","I","II","III","IV","V","MD","DDS","PhD","DVM"];
-Faker.definitions.br_state_abbr = function () {
- return [
- 'AC',
- 'AL',
- 'AP',
- 'AM',
- 'BA',
- 'CE',
- 'DF',
- 'ES',
- 'GO',
- 'MA',
- 'MT',
- 'MS',
- 'MG',
- 'PR',
- 'PB',
- 'PA',
- 'PE',
- 'PI',
- 'RJ',
- 'RN',
- 'RS',
- 'RO',
- 'RR',
- 'SC',
- 'SE',
- 'SP',
- 'TO'
- ];
-};
+Faker.definitions.br_state = ["Acre","Alagoas","Amapá","Amazonas","Bahia","Ceará","Distrito Federal","Espírito Santo","Goiás","Maranhão","Mato Grosso","Mato Grosso do Sul","Minas Gerais","Paraná","Paraíba","Pará","Pernambuco","Piauí","Rio de Janeiro","Rio Grande do Norte","Rio Grande do Sul","Rondônia","Roraima","Santa Catarina","Sergipe","São Paulo","Tocantins"];
+
+Faker.definitions.br_state_abbr = ["AC","AL","AP","AM","BA","CE","DF","ES","GO","MA","MT","MS","MG","PR","PB","PA","PE","PI","RJ","RN","RS","RO","RR","SC","SE","SP","TO"];
+
+Faker.definitions.us_state = ["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"];
+
+Faker.definitions.us_state_abbr = ["AL","AK","AS","AZ","AR","CA","CO","CT","DE","DC","FM","FL","GA","GU","HI","ID","IL","IN","IA","KS","KY","LA","ME","MH","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","MP","OH","OK","OR","PW","PA","PR","RI","SC","SD","TN","TX","UT","VT","VI","VA","WA","WV","WI","WY","AE","AA","AP"];
-Faker.definitions.us_state = function (){return ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'];};
+Faker.definitions.city_prefix = ["North","East","West","South","New","Lake","Port"];
-Faker.definitions.us_state_abbr = function (){return ["AL", "AK", "AS", "AZ", "AR", "CA", "CO", 'CT', "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY", "AE", "AA", "AP"];};
+Faker.definitions.city_suffix = ["town","ton","land","ville","berg","burgh","borough","bury","view","port","mouth","stad","furt","chester","mouth","fort","haven","side","shire"];
-Faker.definitions.city_prefix = function (){return ["North", "East", "West", "South", "New", "Lake", "Port"];};
+Faker.definitions.street_suffix = ["Alley","Avenue","Branch","Bridge","Brook","Brooks","Burg","Burgs","Bypass","Camp","Canyon","Cape","Causeway","Center","Centers","Circle","Circles","Cliff","Cliffs","Club","Common","Corner","Corners","Course","Court","Courts","Cove","Coves","Creek","Crescent","Crest","Crossing","Crossroad","Curve","Dale","Dam","Divide","Drive","Drive","Drives","Estate","Estates","Expressway","Extension","Extensions","Fall","Falls","Ferry","Field","Fields","Flat","Flats","Ford","Fords","Forest","Forge","Forges","Fork","Forks","Fort","Freeway","Garden","Gardens","Gateway","Glen","Glens","Green","Greens","Grove","Groves","Harbor","Harbors","Haven","Heights","Highway","Hill","Hills","Hollow","Inlet","Inlet","Island","Island","Islands","Islands","Isle","Isle","Junction","Junctions","Key","Keys","Knoll","Knolls","Lake","Lakes","Land","Landing","Lane","Light","Lights","Loaf","Lock","Locks","Locks","Lodge","Lodge","Loop","Mall","Manor","Manors","Meadow","Meadows","Mews","Mill","Mills","Mission","Mission","Motorway","Mount","Mountain","Mountain","Mountains","Mountains","Neck","Orchard","Oval","Overpass","Park","Parks","Parkway","Parkways","Pass","Passage","Path","Pike","Pine","Pines","Place","Plain","Plains","Plains","Plaza","Plaza","Point","Points","Port","Port","Ports","Ports","Prairie","Prairie","Radial","Ramp","Ranch","Rapid","Rapids","Rest","Ridge","Ridges","River","Road","Road","Roads","Roads","Route","Row","Rue","Run","Shoal","Shoals","Shore","Shores","Skyway","Spring","Springs","Springs","Spur","Spurs","Square","Square","Squares","Squares","Station","Station","Stravenue","Stravenue","Stream","Stream","Street","Street","Streets","Summit","Summit","Terrace","Throughway","Trace","Track","Trafficway","Trail","Trail","Tunnel","Tunnel","Turnpike","Turnpike","Underpass","Union","Unions","Valley","Valleys","Via","Viaduct","View","Views","Village","Village","","Villages","Ville","Vista","Vista","Walk","Walks","Wall","Way","Ways","Well","Wells"];
-Faker.definitions.city_suffix = function (){return ["town", "ton", "land", "ville", "berg", "burgh", "borough", "bury", "view", "port", "mouth", "stad", "furt", "chester", "mouth", "fort", "haven", "side", "shire"];};
+Faker.definitions.uk_county = ["Avon","Bedfordshire","Berkshire","Borders","Buckinghamshire","Cambridgeshire","Central","Cheshire","Cleveland","Clwyd","Cornwall","County Antrim","County Armagh","County Down","County Fermanagh","County Londonderry","County Tyrone","Cumbria","Derbyshire","Devon","Dorset","Dumfries and Galloway","Durham","Dyfed","East Sussex","Essex","Fife","Gloucestershire","Grampian","Greater Manchester","Gwent","Gwynedd County","Hampshire","Herefordshire","Hertfordshire","Highlands and Islands","Humberside","Isle of Wight","Kent","Lancashire","Leicestershire","Lincolnshire","Lothian","Merseyside","Mid Glamorgan","Norfolk","North Yorkshire","Northamptonshire","Northumberland","Nottinghamshire","Oxfordshire","Powys","Rutland","Shropshire","Somerset","South Glamorgan","South Yorkshire","Staffordshire","Strathclyde","Suffolk","Surrey","Tayside","Tyne and Wear","Warwickshire","West Glamorgan","West Midlands","West Sussex","West Yorkshire","Wiltshire","Worcestershire"];
-Faker.definitions.street_suffix = function (){return ["Alley","Avenue","Branch","Bridge","Brook","Brooks","Burg","Burgs","Bypass","Camp","Canyon","Cape","Causeway","Center","Centers","Circle","Circles","Cliff","Cliffs","Club","Common","Corner","Corners","Course","Court","Courts","Cove","Coves","Creek","Crescent","Crest","Crossing","Crossroad","Curve","Dale","Dam","Divide","Drive","Drive","Drives","Estate","Estates","Expressway","Extension","Extensions","Fall","Falls","Ferry","Field","Fields","Flat","Flats","Ford","Fords","Forest","Forge","Forges","Fork","Forks","Fort","Freeway","Garden","Gardens","Gateway","Glen","Glens","Green","Greens","Grove","Groves","Harbor","Harbors","Haven","Heights","Highway","Hill","Hills","Hollow","Inlet","Inlet","Island","Island","Islands","Islands","Isle","Isle","Junction","Junctions","Key","Keys","Knoll","Knolls","Lake","Lakes","Land","Landing","Lane","Light","Lights","Loaf","Lock","Locks","Locks","Lodge","Lodge","Loop","Mall","Manor","Manors","Meadow","Meadows","Mews","Mill","Mills","Mission","Mission","Motorway","Mount","Mountain","Mountain","Mountains","Mountains","Neck","Orchard","Oval","Overpass","Park","Parks","Parkway","Parkways","Pass","Passage","Path","Pike","Pine","Pines","Place","Plain","Plains","Plains","Plaza","Plaza","Point","Points","Port","Port","Ports","Ports","Prairie","Prairie","Radial","Ramp","Ranch","Rapid","Rapids","Rest","Ridge","Ridges","River","Road","Road","Roads","Roads","Route","Row","Rue","Run","Shoal","Shoals","Shore","Shores","Skyway","Spring","Springs","Springs","Spur","Spurs","Square","Square","Squares","Squares","Station","Station","Stravenue","Stravenue","Stream","Stream","Street","Street","Streets","Summit","Summit","Terrace","Throughway","Trace","Track","Trafficway","Trail","Trail","Tunnel","Tunnel","Turnpike","Turnpike","Underpass","Union","Unions","Valley","Valleys","Via","Viaduct","View","Views","Village","Village","","Villages","Ville","Vista","Vista","Walk","Walks","Wall","Way","Ways","Well","Wells"];};
+Faker.definitions.uk_country = ["England","Scotland","Wales","Northern Ireland"];
-Faker.definitions.uk_county = function (){return ['Avon', 'Bedfordshire', 'Berkshire', 'Borders', 'Buckinghamshire', 'Cambridgeshire', 'Central', 'Cheshire', 'Cleveland', 'Clwyd', 'Cornwall', 'County Antrim', 'County Armagh', 'County Down', 'County Fermanagh', 'County Londonderry', 'County Tyrone', 'Cumbria', 'Derbyshire', 'Devon', 'Dorset', 'Dumfries and Galloway', 'Durham', 'Dyfed', 'East Sussex', 'Essex', 'Fife', 'Gloucestershire', 'Grampian', 'Greater Manchester', 'Gwent', 'Gwynedd County', 'Hampshire', 'Herefordshire', 'Hertfordshire', 'Highlands and Islands', 'Humberside', 'Isle of Wight', 'Kent', 'Lancashire', 'Leicestershire', 'Lincolnshire', 'Lothian', 'Merseyside', 'Mid Glamorgan', 'Norfolk', 'North Yorkshire', 'Northamptonshire', 'Northumberland', 'Nottinghamshire', 'Oxfordshire', 'Powys', 'Rutland', 'Shropshire', 'Somerset', 'South Glamorgan', 'South Yorkshire', 'Staffordshire', 'Strathclyde', 'Suffolk', 'Surrey', 'Tayside', 'Tyne and Wear', 'Warwickshire', 'West Glamorgan', 'West Midlands', 'West Sussex', 'West Yorkshire', 'Wiltshire', 'Worcestershire'];};
+Faker.definitions.catch_phrase_adjective = ["Adaptive","Advanced","Ameliorated","Assimilated","Automated","Balanced","Business-focused","Centralized","Cloned","Compatible","Configurable","Cross-group","Cross-platform","Customer-focused","Customizable","Decentralized","De-engineered","Devolved","Digitized","Distributed","Diverse","Down-sized","Enhanced","Enterprise-wide","Ergonomic","Exclusive","Expanded","Extended","Face to face","Focused","Front-line","Fully-configurable","Function-based","Fundamental","Future-proofed","Grass-roots","Horizontal","Implemented","Innovative","Integrated","Intuitive","Inverse","Managed","Mandatory","Monitored","Multi-channelled","Multi-lateral","Multi-layered","Multi-tiered","Networked","Object-based","Open-architected","Open-source","Operative","Optimized","Optional","Organic","Organized","Persevering","Persistent","Phased","Polarised","Pre-emptive","Proactive","Profit-focused","Profound","Programmable","Progressive","Public-key","Quality-focused","Reactive","Realigned","Re-contextualized","Re-engineered","Reduced","Reverse-engineered","Right-sized","Robust","Seamless","Secured","Self-enabling","Sharable","Stand-alone","Streamlined","Switchable","Synchronised","Synergistic","Synergized","Team-oriented","Total","Triple-buffered","Universal","Up-sized","Upgradable","User-centric","User-friendly","Versatile","Virtual","Visionary","Vision-oriented"];
-Faker.definitions.uk_country = function (){return ['England', 'Scotland', 'Wales', 'Northern Ireland'];};
+Faker.definitions.catch_phrase_descriptor = ["24 hour","24/7","3rd generation","4th generation","5th generation","6th generation","actuating","analyzing","assymetric","asynchronous","attitude-oriented","background","bandwidth-monitored","bi-directional","bifurcated","bottom-line","clear-thinking","client-driven","client-server","coherent","cohesive","composite","context-sensitive","contextually-based","content-based","dedicated","demand-driven","didactic","directional","discrete","disintermediate","dynamic","eco-centric","empowering","encompassing","even-keeled","executive","explicit","exuding","fault-tolerant","foreground","fresh-thinking","full-range","global","grid-enabled","heuristic","high-level","holistic","homogeneous","human-resource","hybrid","impactful","incremental","intangible","interactive","intermediate","leading edge","local","logistical","maximized","methodical","mission-critical","mobile","modular","motivating","multimedia","multi-state","multi-tasking","national","needs-based","neutral","next generation","non-volatile","object-oriented","optimal","optimizing","radical","real-time","reciprocal","regional","responsive","scalable","secondary","solution-oriented","stable","static","systematic","systemic","system-worthy","tangible","tertiary","transitional","uniform","upward-trending","user-facing","value-added","web-enabled","well-modulated","zero administration","zero defect","zero tolerance"];
-Faker.definitions.catch_phrase_adjective = function (){return ["Adaptive", "Advanced", "Ameliorated", "Assimilated", "Automated", "Balanced", "Business-focused", "Centralized", "Cloned", "Compatible", "Configurable", "Cross-group", "Cross-platform", "Customer-focused", "Customizable", "Decentralized", "De-engineered", "Devolved", "Digitized", "Distributed", "Diverse", "Down-sized", "Enhanced", "Enterprise-wide", "Ergonomic", "Exclusive", "Expanded", "Extended", "Face to face", "Focused", "Front-line", "Fully-configurable", "Function-based", "Fundamental", "Future-proofed", "Grass-roots", "Horizontal", "Implemented", "Innovative", "Integrated", "Intuitive", "Inverse", "Managed", "Mandatory", "Monitored", "Multi-channelled", "Multi-lateral", "Multi-layered", "Multi-tiered", "Networked", "Object-based", "Open-architected", "Open-source", "Operative", "Optimized", "Optional", "Organic", "Organized", "Persevering", "Persistent", "Phased", "Polarised", "Pre-emptive", "Proactive", "Profit-focused", "Profound", "Programmable", "Progressive", "Public-key", "Quality-focused", "Reactive", "Realigned", "Re-contextualized", "Re-engineered", "Reduced", "Reverse-engineered", "Right-sized", "Robust", "Seamless", "Secured", "Self-enabling", "Sharable", "Stand-alone", "Streamlined", "Switchable", "Synchronised", "Synergistic", "Synergized", "Team-oriented", "Total", "Triple-buffered", "Universal", "Up-sized", "Upgradable", "User-centric", "User-friendly", "Versatile", "Virtual", "Visionary", "Vision-oriented"];};
+Faker.definitions.catch_phrase_noun = ["ability","access","adapter","algorithm","alliance","analyzer","application","approach","architecture","archive","artificial intelligence","array","attitude","benchmark","budgetary management","capability","capacity","challenge","circuit","collaboration","complexity","concept","conglomeration","contingency","core","customer loyalty","database","data-warehouse","definition","emulation","encoding","encryption","extranet","firmware","flexibility","focus group","forecast","frame","framework","function","functionalities","Graphic Interface","groupware","Graphical User Interface","hardware","help-desk","hierarchy","hub","implementation","info-mediaries","infrastructure","initiative","installation","instruction set","interface","internet solution","intranet","knowledge user","knowledge base","local area network","leverage","matrices","matrix","methodology","middleware","migration","model","moderator","monitoring","moratorium","neural-net","open architecture","open system","orchestration","paradigm","parallelism","policy","portal","pricing structure","process improvement","product","productivity","project","projection","protocol","secured line","service-desk","software","solution","standardization","strategy","structure","success","superstructure","support","synergy","system engine","task-force","throughput","time-frame","toolset","utilisation","website","workforce"];
-Faker.definitions.catch_phrase_descriptor = function (){return ["24 hour", "24/7", "3rd generation", "4th generation", "5th generation", "6th generation", "actuating", "analyzing", "assymetric", "asynchronous", "attitude-oriented", "background", "bandwidth-monitored", "bi-directional", "bifurcated", "bottom-line", "clear-thinking", "client-driven", "client-server", "coherent", "cohesive", "composite", "context-sensitive", "contextually-based", "content-based", "dedicated", "demand-driven", "didactic", "directional", "discrete", "disintermediate", "dynamic", "eco-centric", "empowering", "encompassing", "even-keeled", "executive", "explicit", "exuding", "fault-tolerant", "foreground", "fresh-thinking", "full-range", "global", "grid-enabled", "heuristic", "high-level", "holistic", "homogeneous", "human-resource", "hybrid", "impactful", "incremental", "intangible", "interactive", "intermediate", "leading edge", "local", "logistical", "maximized", "methodical", "mission-critical", "mobile", "modular", "motivating", "multimedia", "multi-state", "multi-tasking", "national", "needs-based", "neutral", "next generation", "non-volatile", "object-oriented", "optimal", "optimizing", "radical", "real-time", "reciprocal", "regional", "responsive", "scalable", "secondary", "solution-oriented", "stable", "static", "systematic", "systemic", "system-worthy", "tangible", "tertiary", "transitional", "uniform", "upward-trending", "user-facing", "value-added", "web-enabled", "well-modulated", "zero administration", "zero defect", "zero tolerance"];};
+Faker.definitions.bs_adjective = ["implement","utilize","integrate","streamline","optimize","evolve","transform","embrace","enable","orchestrate","leverage","reinvent","aggregate","architect","enhance","incentivize","morph","empower","envisioneer","monetize","harness","facilitate","seize","disintermediate","synergize","strategize","deploy","brand","grow","target","syndicate","synthesize","deliver","mesh","incubate","engage","maximize","benchmark","expedite","reintermediate","whiteboard","visualize","repurpose","innovate","scale","unleash","drive","extend","engineer","revolutionize","generate","exploit","transition","e-enable","iterate","cultivate","matrix","productize","redefine","recontextualize"];
-Faker.definitions.catch_phrase_noun = function (){return ["ability", "access", "adapter", "algorithm", "alliance", "analyzer", "application", "approach", "architecture", "archive", "artificial intelligence", "array", "attitude", "benchmark", "budgetary management", "capability", "capacity", "challenge", "circuit", "collaboration", "complexity", "concept", "conglomeration", "contingency", "core", "customer loyalty", "database", "data-warehouse", "definition", "emulation", "encoding", "encryption", "extranet", "firmware", "flexibility", "focus group", "forecast", "frame", "framework", "function", "functionalities", "Graphic Interface", "groupware", "Graphical User Interface", "hardware", "help-desk", "hierarchy", "hub", "implementation", "info-mediaries", "infrastructure", "initiative", "installation", "instruction set", "interface", "internet solution", "intranet", "knowledge user", "knowledge base", "local area network", "leverage", "matrices", "matrix", "methodology", "middleware", "migration", "model", "moderator", "monitoring", "moratorium", "neural-net", "open architecture", "open system", "orchestration", "paradigm", "parallelism", "policy", "portal", "pricing structure", "process improvement", "product", "productivity", "project", "projection", "protocol", "secured line", "service-desk", "software", "solution", "standardization", "strategy", "structure", "success", "superstructure", "support", "synergy", "system engine", "task-force", "throughput", "time-frame", "toolset", "utilisation", "website", "workforce"];};
+Faker.definitions.bs_buzz = ["clicks-and-mortar","value-added","vertical","proactive","robust","revolutionary","scalable","leading-edge","innovative","intuitive","strategic","e-business","mission-critical","sticky","one-to-one","24/7","end-to-end","global","B2B","B2C","granular","frictionless","virtual","viral","dynamic","24/365","best-of-breed","killer","magnetic","bleeding-edge","web-enabled","interactive","dot-com","sexy","back-end","real-time","efficient","front-end","distributed","seamless","extensible","turn-key","world-class","open-source","cross-platform","cross-media","synergistic","bricks-and-clicks","out-of-the-box","enterprise","integrated","impactful","wireless","transparent","next-generation","cutting-edge","user-centric","visionary","customized","ubiquitous","plug-and-play","collaborative","compelling","holistic","rich"];
-Faker.definitions.bs_adjective = function (){return ["implement", "utilize", "integrate", "streamline", "optimize", "evolve", "transform", "embrace", "enable", "orchestrate", "leverage", "reinvent", "aggregate", "architect", "enhance", "incentivize", "morph", "empower", "envisioneer", "monetize", "harness", "facilitate", "seize", "disintermediate", "synergize", "strategize", "deploy", "brand", "grow", "target", "syndicate", "synthesize", "deliver", "mesh", "incubate", "engage", "maximize", "benchmark", "expedite", "reintermediate", "whiteboard", "visualize", "repurpose", "innovate", "scale", "unleash", "drive", "extend", "engineer", "revolutionize", "generate", "exploit", "transition", "e-enable", "iterate", "cultivate", "matrix", "productize", "redefine", "recontextualize"];};
+Faker.definitions.bs_noun = ["synergies","web-readiness","paradigms","markets","partnerships","infrastructures","platforms","initiatives","channels","eyeballs","communities","ROI","solutions","e-tailers","e-services","action-items","portals","niches","technologies","content","vortals","supply-chains","convergence","relationships","architectures","interfaces","e-markets","e-commerce","systems","bandwidth","infomediaries","models","mindshare","deliverables","users","schemas","networks","applications","metrics","e-business","functionalities","experiences","web services","methodologies"];
-Faker.definitions.bs_buzz = function (){return ["clicks-and-mortar", "value-added", "vertical", "proactive", "robust", "revolutionary", "scalable", "leading-edge", "innovative", "intuitive", "strategic", "e-business", "mission-critical", "sticky", "one-to-one", "24/7", "end-to-end", "global", "B2B", "B2C", "granular", "frictionless", "virtual", "viral", "dynamic", "24/365", "best-of-breed", "killer", "magnetic", "bleeding-edge", "web-enabled", "interactive", "dot-com", "sexy", "back-end", "real-time", "efficient", "front-end", "distributed", "seamless", "extensible", "turn-key", "world-class", "open-source", "cross-platform", "cross-media", "synergistic", "bricks-and-clicks", "out-of-the-box", "enterprise", "integrated", "impactful", "wireless", "transparent", "next-generation", "cutting-edge", "user-centric", "visionary", "customized", "ubiquitous", "plug-and-play", "collaborative", "compelling", "holistic", "rich"];};
+Faker.definitions.domain_suffix = ["co.uk","com","us","net","ca","biz","info","name","io","org","biz","tv","me"];
-Faker.definitions.bs_noun = function (){return ["synergies", "web-readiness", "paradigms", "markets", "partnerships", "infrastructures", "platforms", "initiatives", "channels", "eyeballs", "communities", "ROI", "solutions", "e-tailers", "e-services", "action-items", "portals", "niches", "technologies", "content", "vortals", "supply-chains", "convergence", "relationships", "architectures", "interfaces", "e-markets", "e-commerce", "systems", "bandwidth", "infomediaries", "models", "mindshare", "deliverables", "users", "schemas", "networks", "applications", "metrics", "e-business", "functionalities", "experiences", "web services", "methodologies"];};
+Faker.definitions.lorem = ["alias","consequatur","aut","perferendis","sit","voluptatem","accusantium","doloremque","aperiam","eaque","ipsa","quae","ab","illo","inventore","veritatis","et","quasi","architecto","beatae","vitae","dicta","sunt","explicabo","aspernatur","aut","odit","aut","fugit","sed","quia","consequuntur","magni","dolores","eos","qui","ratione","voluptatem","sequi","nesciunt","neque","dolorem","ipsum","quia","dolor","sit","amet","consectetur","adipisci","velit","sed","quia","non","numquam","eius","modi","tempora","incidunt","ut","labore","et","dolore","magnam","aliquam","quaerat","voluptatem","ut","enim","ad","minima","veniam","quis","nostrum","exercitationem","ullam","corporis","nemo","enim","ipsam","voluptatem","quia","voluptas","sit","suscipit","laboriosam","nisi","ut","aliquid","ex","ea","commodi","consequatur","quis","autem","vel","eum","iure","reprehenderit","qui","in","ea","voluptate","velit","esse","quam","nihil","molestiae","et","iusto","odio","dignissimos","ducimus","qui","blanditiis","praesentium","laudantium","totam","rem","voluptatum","deleniti","atque","corrupti","quos","dolores","et","quas","molestias","excepturi","sint","occaecati","cupiditate","non","provident","sed","ut","perspiciatis","unde","omnis","iste","natus","error","similique","sunt","in","culpa","qui","officia","deserunt","mollitia","animi","id","est","laborum","et","dolorum","fuga","et","harum","quidem","rerum","facilis","est","et","expedita","distinctio","nam","libero","tempore","cum","soluta","nobis","est","eligendi","optio","cumque","nihil","impedit","quo","porro","quisquam","est","qui","minus","id","quod","maxime","placeat","facere","possimus","omnis","voluptas","assumenda","est","omnis","dolor","repellendus","temporibus","autem","quibusdam","et","aut","consequatur","vel","illum","qui","dolorem","eum","fugiat","quo","voluptas","nulla","pariatur","at","vero","eos","et","accusamus","officiis","debitis","aut","rerum","necessitatibus","saepe","eveniet","ut","et","voluptates","repudiandae","sint","et","molestiae","non","recusandae","itaque","earum","rerum","hic","tenetur","a","sapiente","delectus","ut","aut","reiciendis","voluptatibus","maiores","doloribus","asperiores","repellat"];
-Faker.definitions.domain_suffix = function (){return ["co.uk", "com", "us", "uk", "ca", "biz", "info", "name"];};
+Faker.definitions.phone_formats = ["###-###-####","(###)###-####","1-###-###-####","###.###.####","###-###-####","(###)###-####","1-###-###-####","###.###.####","###-###-#### x###","(###)###-#### x###","1-###-###-#### x###","###.###.#### x###","###-###-#### x####","(###)###-#### x####","1-###-###-#### x####","###.###.#### x####","###-###-#### x#####","(###)###-#### x#####","1-###-###-#### x#####","###.###.#### x#####"];
+var definitions = Faker.definitions;
+var Helpers = Faker.Helpers;
-Faker.definitions.lorem = function (){return ["alias","consequatur","aut","perferendis","sit","voluptatem","accusantium","doloremque","aperiam","eaque","ipsa","quae","ab","illo","inventore","veritatis","et","quasi","architecto","beatae","vitae","dicta","sunt","explicabo","aspernatur","aut","odit","aut","fugit","sed","quia","consequuntur","magni","dolores","eos","qui","ratione","voluptatem","sequi","nesciunt","neque","dolorem","ipsum","quia","dolor","sit","amet","consectetur","adipisci","velit","sed","quia","non","numquam","eius","modi","tempora","incidunt","ut","labore","et","dolore","magnam","aliquam","quaerat","voluptatem","ut","enim","ad","minima","veniam","quis","nostrum","exercitationem","ullam","corporis","nemo","enim","ipsam","voluptatem","quia","voluptas","sit","suscipit","laboriosam","nisi","ut","aliquid","ex","ea","commodi","consequatur","quis","autem","vel","eum","iure","reprehenderit","qui","in","ea","voluptate","velit","esse","quam","nihil","molestiae","et","iusto","odio","dignissimos","ducimus","qui","blanditiis","praesentium","laudantium","totam","rem","voluptatum","deleniti","atque","corrupti","quos","dolores","et","quas","molestias","excepturi","sint","occaecati","cupiditate","non","provident","sed","ut","perspiciatis","unde","omnis","iste","natus","error","similique","sunt","in","culpa","qui","officia","deserunt","mollitia","animi","id","est","laborum","et","dolorum","fuga","et","harum","quidem","rerum","facilis","est","et","expedita","distinctio","nam","libero","tempore","cum","soluta","nobis","est","eligendi","optio","cumque","nihil","impedit","quo","porro","quisquam","est","qui","minus","id","quod","maxime","placeat","facere","possimus","omnis","voluptas","assumenda","est","omnis","dolor","repellendus","temporibus","autem","quibusdam","et","aut","consequatur","vel","illum","qui","dolorem","eum","fugiat","quo","voluptas","nulla","pariatur","at","vero","eos","et","accusamus","officiis","debitis","aut","rerum","necessitatibus","saepe","eveniet","ut","et","voluptates","repudiandae","sint","et","molestiae","non","recusandae","itaque","earum","rerum","hic","tenetur","a","sapiente","delectus","ut","aut","reiciendis","voluptatibus","maiores","doloribus","asperiores","repellat"];};
+if (typeof define == 'function'){
+ define(function(){
+ return Faker;
+ });
+}
+else if(typeof module !== 'undefined' && module.exports) {
+ module.exports = Faker;
+}
+else {
+ window.Faker = Faker;
+}
-Faker.definitions.phone_formats = function (){return [
- '###-###-####',
- '(###)###-####',
- '1-###-###-####',
- '###.###.####',
- '###-###-####',
- '(###)###-####',
- '1-###-###-####',
- '###.###.####',
- '###-###-#### x###',
- '(###)###-#### x###',
- '1-###-###-#### x###',
- '###.###.#### x###',
- '###-###-#### x####',
- '(###)###-#### x####',
- '1-###-###-#### x####',
- '###.###.#### x####',
- '###-###-#### x#####',
- '(###)###-#### x#####',
- '1-###-###-#### x#####',
- '###.###.#### x#####'
-];};
-var definitions = Faker.definitions;
-var Helpers = Faker.Helpers;
-if(typeof exports != "undefined"){for(var prop in Faker){exports[prop] = Faker[prop];}} \ No newline at end of file
+}()); // end Faker closure \ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..bd0e51ab
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,26 @@
+BASE = .
+
+ISTANBUL = ./node_modules/.bin/istanbul
+COVERAGE_OPTS = --lines 95 --statements 95 --branches 95 --functions 95
+
+main: lint test
+
+build:
+ cd BUILD && node BUILD.js
+
+cover:
+ $(ISTANBUL) cover test/run.js --root ./lib -- -T unit,functional
+
+check-coverage:
+ $(ISTANBUL) check-coverage $(COVERAGE_OPTS)
+
+test: cover check-coverage
+
+test-cov: cover check-coverage
+ open coverage/lcov-report/index.html
+
+lint:
+ ./node_modules/jshint/bin/hint ./lib --config $(BASE)/.jshintrc
+
+
+.PHONY: test, build
diff --git a/MinFaker.js b/MinFaker.js
new file mode 100644
index 00000000..4bbcd477
--- /dev/null
+++ b/MinFaker.js
@@ -0,0 +1,30 @@
+!function(){var a={version:"0.5.5",Name:{}};a.Name.firstName=function(){return a.random.first_name()};a.Name.lastName=function(){return a.random.last_name()};a.Name.findName=function(){switch(a.random.number(8)){case 0:return a.random.name_prefix()+" "+this.firstName()+" "+this.lastName();case 1:return this.firstName()+" "+this.lastName()+" "+a.random.name_suffix()}return this.firstName()+" "+this.lastName()};a.Address={};a.Address.zipCode=function(){return e.replaceSymbolWithNumber(a.random.array_element(["#####",
+"#####-####"]))};a.Address.zipCodeFormat=function(a){return e.replaceSymbolWithNumber(["#####","#####-####"][a])};a.Address.city=function(){var b;switch(a.random.number(4)){case 0:b=a.random.city_prefix()+" "+a.random.first_name()+a.random.city_suffix();break;case 1:b=a.random.city_prefix()+" "+a.random.first_name();break;case 2:b=a.random.first_name()+a.random.city_suffix();break;case 3:b=a.random.last_name()+a.random.city_suffix()}return b};a.Address.streetName=function(){var b;switch(a.random.number(2)){case 0:b=
+a.random.last_name()+" "+a.random.street_suffix();break;case 1:b=a.random.first_name()+" "+a.random.street_suffix()}return b};a.Address.streetAddress=function(b){void 0===b&&(b=!1);var d="";switch(a.random.number(3)){case 0:d=e.replaceSymbolWithNumber("#####")+" "+this.streetName();break;case 1:d=e.replaceSymbolWithNumber("####")+" "+this.streetName();break;case 2:d=e.replaceSymbolWithNumber("###")+" "+this.streetName()}return b?d+" "+this.secondaryAddress():d};a.Address.secondaryAddress=function(){return e.replaceSymbolWithNumber(a.random.array_element(["Apt. ###",
+"Suite ###"]))};a.Address.brState=function(b){return b?a.random.br_state_abbr():a.random.br_state()};a.Address.ukCounty=function(){return a.random.uk_county()};a.Address.ukCountry=function(){return a.random.uk_country()};a.Address.usState=function(b){return b?a.random.us_state_abbr():a.random.us_state()};a.Address.latitude=function(){return(a.random.number(18E5)/1E4-90).toFixed(4)};a.Address.longitude=function(){return(a.random.number(36E5)/1E4-180).toFixed(4)};a.PhoneNumber={};a.PhoneNumber.phoneNumber=
+function(){return e.replaceSymbolWithNumber(a.random.phone_formats())};a.PhoneNumber.phoneNumberFormat=function(a){return e.replaceSymbolWithNumber(c.phone_formats[a])};a.Internet={};a.Internet.email=function(){return a.Helpers.slugify(this.userName())+"@"+a.Helpers.slugify(this.domainName())};a.Internet.userName=function(){var b;switch(a.random.number(2)){case 0:b=a.random.first_name();break;case 1:b=a.random.first_name()+a.random.array_element([".","_"])+a.random.last_name()}return b};a.Internet.domainName=
+function(){return this.domainWord()+"."+a.random.domain_suffix()};a.Internet.domainWord=function(){return a.random.first_name().toLowerCase()};a.Internet.ip=function(){for(var a=[],d=0;4>d;d++)a[d]=(254*Math.random()+1).toFixed(0);return a.join(".")};a.Company={};a.Company.suffixes=function(){return["Inc","and Sons","LLC","Group","and Daughters"]};a.Company.companyName=function(b){switch(b?b:a.random.number(3)){case 0:return a.Name.lastName()+" "+this.companySuffix();case 1:return a.Name.lastName()+
+"-"+a.Name.lastName();case 2:return a.Name.lastName()+", "+a.Name.lastName()+" and "+a.Name.lastName()}};a.Company.companySuffix=function(){return a.random.array_element(this.suffixes())};a.Company.catchPhrase=function(){return a.random.catch_phrase_adjective()+" "+a.random.catch_phrase_descriptor()+" "+a.random.catch_phrase_noun()};a.Company.bs=function(){return a.random.bs_adjective()+" "+a.random.bs_buzz()+" "+a.random.bs_noun()};a.Lorem={};a.Lorem.words=function(a){"undefined"==typeof a&&(a=3);
+return e.shuffle(c.lorem).slice(0,a)};a.Lorem.sentence=function(b){"undefined"==typeof b&&(b=3);return this.words(b+a.random.number(7)).join(" ")};a.Lorem.sentences=function(a){"undefined"==typeof a&&(a=3);var d=[];for(a;0<a;a--)d.push(this.sentence());return d.join("\n")};a.Lorem.paragraph=function(b){"undefined"==typeof b&&(b=3);return this.sentences(b+a.random.number(3))};a.Lorem.paragraphs=function(a){"undefined"==typeof a&&(a=3);var d=[];for(a;0<a;a--)d.push(this.paragraph());return d.join("\n \r\t")};
+a.Helpers={};a.Helpers.randomNumber=function(b){return a.random.number(b)};a.Helpers.randomize=function(b){return a.random.array_element(b)};a.Helpers.slugify=function(a){return a.replace(/ /g,"-").replace(/[^\w\.\-]+/g,"")};a.Helpers.replaceSymbolWithNumber=function(a,d){void 0===d&&(d="#");for(var c="",e=0;e<a.length;e++)c=a[e]==d?c+Math.floor(10*Math.random()):c+a[e];return c};a.Helpers.shuffle=function(a){for(var c,e,f=a.length;f;c=parseInt(Math.random()*f,10),e=a[--f],a[f]=a[c],a[c]=e);return a};
+a.Helpers.createCard=function(){return{name:a.Name.findName(),username:a.Internet.userName(),email:a.Internet.email(),address:{streetA:a.Address.streetName(),streetB:a.Address.streetAddress(),streetC:a.Address.streetAddress(!0),streetD:a.Address.secondaryAddress(),city:a.Address.city(),ukCounty:a.Address.ukCounty(),ukCountry:a.Address.ukCountry(),zipcode:a.Address.zipCode(),geo:{lat:a.Address.latitude(),lng:a.Address.longitude()}},phone:a.PhoneNumber.phoneNumber(),website:a.Internet.domainName(),
+company:{name:a.Company.companyName(),catchPhrase:a.Company.catchPhrase(),bs:a.Company.bs()},posts:[{words:a.Lorem.words(),sentence:a.Lorem.sentence(),sentences:a.Lorem.sentences(),paragraph:a.Lorem.paragraph()},{words:a.Lorem.words(),sentence:a.Lorem.sentence(),sentences:a.Lorem.sentences(),paragraph:a.Lorem.paragraph()},{words:a.Lorem.words(),sentence:a.Lorem.sentence(),sentences:a.Lorem.sentences(),paragraph:a.Lorem.paragraph()}]}};a.Helpers.userCard=function(){return{name:a.Name.findName(),username:a.Internet.userName(),
+email:a.Internet.email(),address:{street:a.Address.streetName(!0),suite:a.Address.secondaryAddress(),city:a.Address.city(),zipcode:a.Address.zipCode(),geo:{lat:a.Address.latitude(),lng:a.Address.longitude()}},phone:a.PhoneNumber.phoneNumber(),website:a.Internet.domainName(),company:{name:a.Company.companyName(),catchPhrase:a.Company.catchPhrase(),bs:a.Company.bs()}}};a.random={};a.random.number=function(a){return Math.floor(Math.random()*a)};a.random.array_element=function(a){var c=Math.floor(Math.random()*
+a.length);return a[c]};a.random.city_prefix=function(){return this.array_element(c.city_prefix)};a.random.city_suffix=function(){return this.array_element(c.city_suffix)};a.random.street_suffix=function(){return this.array_element(c.street_suffix)};a.random.br_state=function(){return this.array_element(c.br_state)};a.random.br_state_abbr=function(){return this.array_element(c.br_state_abbr)};a.random.us_state=function(){return this.array_element(c.us_state)};a.random.us_state_abbr=function(){return this.array_element(c.us_state_abbr)};
+a.random.uk_county=function(){return this.array_element(c.uk_county)};a.random.uk_country=function(){return this.array_element(c.uk_country)};a.random.first_name=function(){return this.array_element(c.first_name)};a.random.last_name=function(){return this.array_element(c.last_name)};a.random.name_prefix=function(){return this.array_element(c.name_prefix)};a.random.name_suffix=function(){return this.array_element(c.name_suffix)};a.random.catch_phrase_adjective=function(){return this.array_element(c.catch_phrase_adjective)};
+a.random.catch_phrase_descriptor=function(){return this.array_element(c.catch_phrase_descriptor)};a.random.catch_phrase_noun=function(){return this.array_element(c.catch_phrase_noun)};a.random.bs_adjective=function(){return this.array_element(c.bs_adjective)};a.random.bs_buzz=function(){return this.array_element(c.bs_buzz)};a.random.bs_noun=function(){return this.array_element(c.bs_noun)};a.random.phone_formats=function(){return this.array_element(c.phone_formats)};a.random.domain_suffix=function(){return this.array_element(c.domain_suffix)};
+a.definitions={};a.definitions.first_name="Aaliyah Aaron Abagail Abbey Abbie Abbigail Abby Abdiel Abdul Abdullah Abe Abel Abelardo Abigail Abigale Abigayle Abner Abraham Ada Adah Adalberto Adaline Adam Adan Addie Addison Adela Adelbert Adele Adelia Adeline Adell Adella Adelle Aditya Adolf Adolfo Adolph Adolphus Adonis Adrain Adrian Adriana Adrianna Adriel Adrien Adrienne Afton Aglae Agnes Agustin Agustina Ahmad Ahmed Aida Aidan Aiden Aileen Aimee Aisha Aiyana Akeem Al Alaina Alan Alana Alanis Alanna Alayna Alba Albert Alberta Albertha Alberto Albin Albina Alda Alden Alec Aleen Alejandra Alejandrin Alek Alena Alene Alessandra Alessandro Alessia Aletha Alex Alexa Alexander Alexandra Alexandre Alexandrea Alexandria Alexandrine Alexandro Alexane Alexanne Alexie Alexis Alexys Alexzander Alf Alfonso Alfonzo Alford Alfred Alfreda Alfredo Ali Alia Alice Alicia Alisa Alisha Alison Alivia Aliya Aliyah Aliza Alize Allan Allen Allene Allie Allison Ally Alphonso Alta Althea Alva Alvah Alvena Alvera Alverta Alvina Alvis Alyce Alycia Alysa Alysha Alyson Alysson Amalia Amanda Amani Amara Amari Amaya Amber Ambrose Amelia Amelie Amely America Americo Amie Amina Amir Amira Amiya Amos Amparo Amy Amya Ana Anabel Anabelle Anahi Anais Anastacio Anastasia Anderson Andre Andreane Andreanne Andres Andrew Andy Angel Angela Angelica Angelina Angeline Angelita Angelo Angie Angus Anibal Anika Anissa Anita Aniya Aniyah Anjali Anna Annabel Annabell Annabelle Annalise Annamae Annamarie Anne Annetta Annette Annie Ansel Ansley Anthony Antoinette Antone Antonetta Antonette Antonia Antonietta Antonina Antonio Antwan Antwon Anya April Ara Araceli Aracely Arch Archibald Ardella Arden Ardith Arely Ari Ariane Arianna Aric Ariel Arielle Arjun Arlene Arlie Arlo Armand Armando Armani Arnaldo Arne Arno Arnold Arnoldo Arnulfo Aron Art Arthur Arturo Arvel Arvid Arvilla Aryanna Asa Asha Ashlee Ashleigh Ashley Ashly Ashlynn Ashton Ashtyn Asia Assunta Astrid Athena Aubree Aubrey Audie Audra Audreanne Audrey August Augusta Augustine Augustus Aurelia Aurelie Aurelio Aurore Austen Austin Austyn Autumn Ava Avery Avis Axel Ayana Ayden Ayla Aylin Baby Bailee Bailey Barbara Barney Baron Barrett Barry Bart Bartholome Barton Baylee Beatrice Beau Beaulah Bell Bella Belle Ben Benedict Benjamin Bennett Bennie Benny Benton Berenice Bernadette Bernadine Bernard Bernardo Berneice Bernhard Bernice Bernie Berniece Bernita Berry Bert Berta Bertha Bertram Bertrand Beryl Bessie Beth Bethany Bethel Betsy Bette Bettie Betty Bettye Beulah Beverly Bianka Bill Billie Billy Birdie Blair Blaise Blake Blanca Blanche Blaze Bo Bobbie Bobby Bonita Bonnie Boris Boyd Brad Braden Bradford Bradley Bradly Brady Braeden Brain Brandi Brando Brandon Brandt Brandy Brandyn Brannon Branson Brant Braulio Braxton Brayan Breana Breanna Breanne Brenda Brendan Brenden Brendon Brenna Brennan Brennon Brent Bret Brett Bria Brian Briana Brianne Brice Bridget Bridgette Bridie Brielle Brigitte Brionna Brisa Britney Brittany Brock Broderick Brody Brook Brooke Brooklyn Brooks Brown Bruce Bryana Bryce Brycen Bryon Buck Bud Buddy Buford Bulah Burdette Burley Burnice Buster Cade Caden Caesar Caitlyn Cale Caleb Caleigh Cali Calista Callie Camden Cameron Camila Camilla Camille Camren Camron Camryn Camylle Candace Candelario Candice Candida Candido Cara Carey Carissa Carlee Carleton Carley Carli Carlie Carlo Carlos Carlotta Carmel Carmela Carmella Carmelo Carmen Carmine Carol Carolanne Carole Carolina Caroline Carolyn Carolyne Carrie Carroll Carson Carter Cary Casandra Casey Casimer Casimir Casper Cassandra Cassandre Cassidy Cassie Catalina Caterina Catharine Catherine Cathrine Cathryn Cathy Cayla Ceasar Cecelia Cecil Cecile Cecilia Cedrick Celestine Celestino Celia Celine Cesar Chad Chadd Chadrick Chaim Chance Chandler Chanel Chanelle Charity Charlene Charles Charley Charlie Charlotte Chase Chasity Chauncey Chaya Chaz Chelsea Chelsey Chelsie Chesley Chester Chet Cheyanne Cheyenne Chloe Chris Christ Christa Christelle Christian Christiana Christina Christine Christop Christophe Christopher Christy Chyna Ciara Cicero Cielo Cierra Cindy Citlalli Clair Claire Clara Clarabelle Clare Clarissa Clark Claud Claude Claudia Claudie Claudine Clay Clemens Clement Clementina Clementine Clemmie Cleo Cleora Cleta Cletus Cleve Cleveland Clifford Clifton Clint Clinton Clotilde Clovis Cloyd Clyde Coby Cody Colby Cole Coleman Colin Colleen Collin Colt Colten Colton Columbus Concepcion Conner Connie Connor Conor Conrad Constance Constantin Consuelo Cooper Cora Coralie Corbin Cordelia Cordell Cordia Cordie Corene Corine Cornelius Cornell Corrine Cortez Cortney Cory Coty Courtney Coy Craig Crawford Creola Cristal Cristian Cristina Cristobal Cristopher Cruz Crystal Crystel Cullen Curt Curtis Cydney Cynthia Cyril Cyrus Dagmar Dahlia Daija Daisha Daisy Dakota Dale Dallas Dallin Dalton Damaris Dameon Damian Damien Damion Damon Dan Dana Dandre Dane D'angelo Dangelo Danial Daniela Daniella Danielle Danika Dannie Danny Dante Danyka Daphne Daphnee Daphney Darby Daren Darian Dariana Darien Dario Darion Darius Darlene Daron Darrel Darrell Darren Darrick Darrin Darrion Darron Darryl Darwin Daryl Dashawn Dasia Dave David Davin Davion Davon Davonte Dawn Dawson Dax Dayana Dayna Dayne Dayton Dean Deangelo Deanna Deborah Declan Dedric Dedrick Dee Deion Deja Dejah Dejon Dejuan Delaney Delbert Delfina Delia Delilah Dell Della Delmer Delores Delpha Delphia Delphine Delta Demarco Demarcus Demario Demetris Demetrius Demond Dena Denis Dennis Deon Deondre Deontae Deonte Dereck Derek Derick Deron Derrick Deshaun Deshawn Desiree Desmond Dessie Destany Destin Destinee Destiney Destini Destiny Devan Devante Deven Devin Devon Devonte Devyn Dewayne Dewitt Dexter Diamond Diana Dianna Diego Dillan Dillon Dimitri Dina Dino Dion Dixie Dock Dolly Dolores Domenic Domenica Domenick Domenico Domingo Dominic Dominique Don Donald Donato Donavon Donna Donnell Donnie Donny Dora Dorcas Dorian Doris Dorothea Dorothy Dorris Dortha Dorthy Doug Douglas Dovie Doyle Drake Drew Duane Dudley Dulce Duncan Durward Dustin Dusty Dwight Dylan Earl Earlene Earline Earnest Earnestine Easter Easton Ebba Ebony Ed Eda Edd Eddie Eden Edgar Edgardo Edison Edmond Edmund Edna Eduardo Edward Edwardo Edwin Edwina Edyth Edythe Effie Efrain Efren Eileen Einar Eino Eladio Elaina Elbert Elda Eldon Eldora Eldred Eldridge Eleanora Eleanore Eleazar Electa Elena Elenor Elenora Eleonore Elfrieda Eli Elian Eliane Elias Eliezer Elijah Elinor Elinore Elisa Elisabeth Elise Eliseo Elisha Elissa Eliza Elizabeth Ella Ellen Ellie Elliot Elliott Ellis Ellsworth Elmer Elmira Elmo Elmore Elna Elnora Elody Eloisa Eloise Elouise Eloy Elroy Elsa Else Elsie Elta Elton Elva Elvera Elvie Elvis Elwin Elwyn Elyse Elyssa Elza Emanuel Emelia Emelie Emely Emerald Emerson Emery Emie Emil Emile Emilia Emiliano Emilie Emilio Emily Emma Emmalee Emmanuel Emmanuelle Emmet Emmett Emmie Emmitt Emmy Emory Ena Enid Enoch Enola Enos Enrico Enrique Ephraim Era Eriberto Eric Erica Erich Erick Ericka Erik Erika Erin Erling Erna Ernest Ernestina Ernestine Ernesto Ernie Ervin Erwin Eryn Esmeralda Esperanza Esta Esteban Estefania Estel Estell Estella Estelle Estevan Esther Estrella Etha Ethan Ethel Ethelyn Ethyl Ettie Eudora Eugene Eugenia Eula Eulah Eulalia Euna Eunice Eusebio Eva Evalyn Evan Evangeline Evans Eve Eveline Evelyn Everardo Everett Everette Evert Evie Ewald Ewell Ezekiel Ezequiel Ezra Fabian Fabiola Fae Fannie Fanny Fatima Faustino Fausto Favian Fay Faye Federico Felicia Felicita Felicity Felipa Felipe Felix Felton Fermin Fern Fernando Ferne Fidel Filiberto Filomena Finn Fiona Flavie Flavio Fleta Fletcher Flo Florence Florencio Florian Florida Florine Flossie Floy Floyd Ford Forest Forrest Foster Frances Francesca Francesco Francis Francisca Francisco Franco Frank Frankie Franz Fred Freda Freddie Freddy Frederic Frederick Frederik Frederique Fredrick Fredy Freeda Freeman Freida Frida Frieda Friedrich Fritz Furman Gabe Gabriel Gabriella Gabrielle Gaetano Gage Gail Gardner Garett Garfield Garland Garnet Garnett Garret Garrett Garrick Garrison Garry Garth Gaston Gavin Gay Gayle Gaylord Gene General Genesis Genevieve Gennaro Genoveva Geo Geoffrey George Georgette Georgiana Georgianna Geovanni Geovanny Geovany Gerald Geraldine Gerard Gerardo Gerda Gerhard Germaine German Gerry Gerson Gertrude Gia Gianni Gideon Gilbert Gilberto Gilda Giles Gillian Gina Gino Giovani Giovanna Giovanni Giovanny Gisselle Giuseppe Gladyce Gladys Glen Glenda Glenna Glennie Gloria Godfrey Golda Golden Gonzalo Gordon Grace Gracie Graciela Grady Graham Grant Granville Grayce Grayson Green Greg Gregg Gregoria Gregorio Gregory Greta Gretchen Greyson Griffin Grover Guadalupe Gudrun Guido Guillermo Guiseppe Gunnar Gunner Gus Gussie Gust Gustave Guy Gwen Gwendolyn Hadley Hailee Hailey Hailie Hal Haleigh Haley Halie Halle Hallie Hank Hanna Hannah Hans Hardy Harley Harmon Harmony Harold Harrison Harry Harvey Haskell Hassan Hassie Hattie Haven Hayden Haylee Hayley Haylie Hazel Hazle Heath Heather Heaven Heber Hector Heidi Helen Helena Helene Helga Hellen Helmer Heloise Henderson Henri Henriette Henry Herbert Herman Hermann Hermina Herminia Herminio Hershel Herta Hertha Hester Hettie Hilario Hilbert Hilda Hildegard Hillard Hillary Hilma Hilton Hipolito Hiram Hobart Holden Hollie Hollis Holly Hope Horace Horacio Hortense Hosea Houston Howard Howell Hoyt Hubert Hudson Hugh Hulda Humberto Hunter Hyman Ian Ibrahim Icie Ida Idell Idella Ignacio Ignatius Ike Ila Ilene Iliana Ima Imani Imelda Immanuel Imogene Ines Irma Irving Irwin Isaac Isabel Isabell Isabella Isabelle Isac Isadore Isai Isaiah Isaias Isidro Ismael Isobel Isom Israel Issac Itzel Iva Ivah Ivory Ivy Izabella Izaiah Jabari Jace Jacey Jacinthe Jacinto Jack Jackeline Jackie Jacklyn Jackson Jacky Jaclyn Jacquelyn Jacques Jacynthe Jada Jade Jaden Jadon Jadyn Jaeden Jaida Jaiden Jailyn Jaime Jairo Jakayla Jake Jakob Jaleel Jalen Jalon Jalyn Jamaal Jamal Jamar Jamarcus Jamel Jameson Jamey Jamie Jamil Jamir Jamison Jammie Jan Jana Janae Jane Janelle Janessa Janet Janice Janick Janie Janis Janiya Jannie Jany Jaquan Jaquelin Jaqueline Jared Jaren Jarod Jaron Jarred Jarrell Jarret Jarrett Jarrod Jarvis Jasen Jasmin Jason Jasper Jaunita Javier Javon Javonte Jay Jayce Jaycee Jayda Jayde Jayden Jaydon Jaylan Jaylen Jaylin Jaylon Jayme Jayne Jayson Jazlyn Jazmin Jazmyn Jazmyne Jean Jeanette Jeanie Jeanne Jed Jedediah Jedidiah Jeff Jefferey Jeffery Jeffrey Jeffry Jena Jenifer Jennie Jennifer Jennings Jennyfer Jensen Jerad Jerald Jeramie Jeramy Jerel Jeremie Jeremy Jermain Jermaine Jermey Jerod Jerome Jeromy Jerrell Jerrod Jerrold Jerry Jess Jesse Jessica Jessie Jessika Jessy Jessyca Jesus Jett Jettie Jevon Jewel Jewell Jillian Jimmie Jimmy Jo Joan Joana Joanie Joanne Joannie Joanny Joany Joaquin Jocelyn Jodie Jody Joe Joel Joelle Joesph Joey Johan Johann Johanna Johathan John Johnathan Johnathon Johnnie Johnny Johnpaul Johnson Jolie Jon Jonas Jonatan Jonathan Jonathon Jordan Jordane Jordi Jordon Jordy Jordyn Jorge Jose Josefa Josefina Joseph Josephine Josh Joshua Joshuah Josiah Josiane Josianne Josie Josue Jovan Jovani Jovanny Jovany Joy Joyce Juana Juanita Judah Judd Jude Judge Judson Judy Jules Julia Julian Juliana Julianne Julie Julien Juliet Julio Julius June Junior Junius Justen Justice Justina Justine Juston Justus Justyn Juvenal Juwan Kacey Kaci Kacie Kade Kaden Kadin Kaela Kaelyn Kaia Kailee Kailey Kailyn Kaitlin Kaitlyn Kale Kaleb Kaleigh Kaley Kali Kallie Kameron Kamille Kamren Kamron Kamryn Kane Kara Kareem Karelle Karen Kari Kariane Karianne Karina Karine Karl Karlee Karley Karli Karlie Karolann Karson Kasandra Kasey Kassandra Katarina Katelin Katelyn Katelynn Katharina Katherine Katheryn Kathleen Kathlyn Kathryn Kathryne Katlyn Katlynn Katrina Katrine Kattie Kavon Kay Kaya Kaycee Kayden Kayla Kaylah Kaylee Kayleigh Kayley Kayli Kaylie Kaylin Keagan Keanu Keara Keaton Keegan Keeley Keely Keenan Keira Keith Kellen Kelley Kelli Kellie Kelly Kelsi Kelsie Kelton Kelvin Ken Kendall Kendra Kendrick Kenna Kennedi Kennedy Kenneth Kennith Kenny Kenton Kenya Kenyatta Kenyon Keon Keshaun Keshawn Keven Kevin Kevon Keyon Keyshawn Khalid Khalil Kian Kiana Kianna Kiara Kiarra Kiel Kiera Kieran Kiley Kim Kimberly King Kip Kira Kirk Kirsten Kirstin Kitty Kobe Koby Kody Kolby Kole Korbin Korey Kory Kraig Kris Krista Kristian Kristin Kristina Kristofer Kristoffer Kristopher Kristy Krystal Krystel Krystina Kurt Kurtis Kyla Kyle Kylee Kyleigh Kyler Kylie Kyra Lacey Lacy Ladarius Lafayette Laila Laisha Lamar Lambert Lamont Lance Landen Lane Laney Larissa Laron Larry Larue Laura Laurel Lauren Laurence Lauretta Lauriane Laurianne Laurie Laurine Laury Lauryn Lavada Lavern Laverna Laverne Lavina Lavinia Lavon Lavonne Lawrence Lawson Layla Layne Lazaro Lea Leann Leanna Leanne Leatha Leda Lee Leif Leila Leilani Lela Lelah Leland Lelia Lempi Lemuel Lenna Lennie Lenny Lenora Lenore Leo Leola Leon Leonard Leonardo Leone Leonel Leonie Leonor Leonora Leopold Leopoldo Leora Lera Lesley Leslie Lesly Lessie Lester Leta Letha Letitia Levi Lew Lewis Lexi Lexie Lexus Lia Liam Liana Libbie Libby Lila Lilian Liliana Liliane Lilla Lillian Lilliana Lillie Lilly Lily Lilyan Lina Lincoln Linda Lindsay Lindsey Linnea Linnie Linwood Lionel Lisa Lisandro Lisette Litzy Liza Lizeth Lizzie Llewellyn Lloyd Logan Lois Lola Lolita Loma Lon London Lonie Lonnie Lonny Lonzo Lora Loraine Loren Lorena Lorenz Lorenza Lorenzo Lori Lorine Lorna Lottie Lou Louie Louisa Lourdes Louvenia Lowell Loy Loyal Loyce Lucas Luciano Lucie Lucienne Lucile Lucinda Lucio Lucious Lucius Lucy Ludie Ludwig Lue Luella Luigi Luis Luisa Lukas Lula Lulu Luna Lupe Lura Lurline Luther Luz Lyda Lydia Lyla Lynn Lyric Lysanne Mabel Mabelle Mable Mac Macey Maci Macie Mack Mackenzie Macy Madaline Madalyn Maddison Madeline Madelyn Madelynn Madge Madie Madilyn Madisen Madison Madisyn Madonna Madyson Mae Maegan Maeve Mafalda Magali Magdalen Magdalena Maggie Magnolia Magnus Maia Maida Maiya Major Makayla Makenna Makenzie Malachi Malcolm Malika Malinda Mallie Mallory Malvina Mandy Manley Manuel Manuela Mara Marc Marcel Marcelina Marcelino Marcella Marcelle Marcellus Marcelo Marcia Marco Marcos Marcus Margaret Margarete Margarett Margaretta Margarette Margarita Marge Margie Margot Margret Marguerite Maria Mariah Mariam Marian Mariana Mariane Marianna Marianne Mariano Maribel Marie Mariela Marielle Marietta Marilie Marilou Marilyne Marina Mario Marion Marisa Marisol Maritza Marjolaine Marjorie Marjory Mark Markus Marlee Marlen Marlene Marley Marlin Marlon Marques Marquis Marquise Marshall Marta Martin Martina Martine Marty Marvin Mary Maryam Maryjane Maryse Mason Mateo Mathew Mathias Mathilde Matilda Matilde Matt Matteo Mattie Maud Maude Maudie Maureen Maurice Mauricio Maurine Maverick Mavis Max Maxie Maxime Maximilian Maximillia Maximillian Maximo Maximus Maxine Maxwell May Maya Maybell Maybelle Maye Maymie Maynard Mayra Mazie Mckayla Mckenna Mckenzie Meagan Meaghan Meda Megane Meggie Meghan Mekhi Melany Melba Melisa Melissa Mellie Melody Melvin Melvina Melyna Melyssa Mercedes Meredith Merl Merle Merlin Merritt Mertie Mervin Meta Mia Micaela Micah Michael Michaela Michale Micheal Michel Michele Michelle Miguel Mikayla Mike Mikel Milan Miles Milford Miller Millie Milo Milton Mina Minerva Minnie Miracle Mireille Mireya Misael Missouri Misty Mitchel Mitchell Mittie Modesta Modesto Mohamed Mohammad Mohammed Moises Mollie Molly Mona Monica Monique Monroe Monserrat Monserrate Montana Monte Monty Morgan Moriah Morris Mortimer Morton Mose Moses Moshe Mossie Mozell Mozelle Muhammad Muriel Murl Murphy Murray Mustafa Mya Myah Mylene Myles Myra Myriam Myrl Myrna Myron Myrtice Myrtie Myrtis Myrtle Nadia Nakia Name Nannie Naomi Naomie Napoleon Narciso Nash Nasir Nat Natalia Natalie Natasha Nathan Nathanael Nathanial Nathaniel Nathen Nayeli Neal Ned Nedra Neha Neil Nelda Nella Nelle Nellie Nels Nelson Neoma Nestor Nettie Neva Newell Newton Nia Nicholas Nicholaus Nichole Nick Nicklaus Nickolas Nico Nicola Nicolas Nicole Nicolette Nigel Nikita Nikki Nikko Niko Nikolas Nils Nina Noah Noble Noe Noel Noelia Noemi Noemie Noemy Nola Nolan Nona Nora Norbert Norberto Norene Norma Norris Norval Norwood Nova Novella Nya Nyah Nyasia Obie Oceane Ocie Octavia Oda Odell Odessa Odie Ofelia Okey Ola Olaf Ole Olen Oleta Olga Olin Oliver Ollie Oma Omari Omer Ona Onie Opal Ophelia Ora Oral Oran Oren Orie Orin Orion Orland Orlando Orlo Orpha Orrin Orval Orville Osbaldo Osborne Oscar Osvaldo Oswald Oswaldo Otha Otho Otilia Otis Ottilie Ottis Otto Ova Owen Ozella Pablo Paige Palma Pamela Pansy Paolo Paris Parker Pascale Pasquale Pat Patience Patricia Patrick Patsy Pattie Paul Paula Pauline Paxton Payton Pearl Pearlie Pearline Pedro Peggie Penelope Percival Percy Perry Pete Peter Petra Peyton Philip Phoebe Phyllis Pierce Pierre Pietro Pink Pinkie Piper Polly Porter Precious Presley Preston Price Prince Princess Priscilla Providenci Prudence Queen Queenie Quentin Quincy Quinn Quinten Quinton Rachael Rachel Rachelle Rae Raegan Rafael Rafaela Raheem Rahsaan Rahul Raina Raleigh Ralph Ramiro Ramon Ramona Randal Randall Randi Randy Ransom Raoul Raphael Raphaelle Raquel Rashad Rashawn Rasheed Raul Raven Ray Raymond Raymundo Reagan Reanna Reba Rebeca Rebecca Rebeka Rebekah Reece Reed Reese Regan Reggie Reginald Reid Reilly Reina Reinhold Remington Rene Renee Ressie Reta Retha Retta Reuben Reva Rex Rey Reyes Reymundo Reyna Reynold Rhea Rhett Rhianna Rhiannon Rhoda Ricardo Richard Richie Richmond Rick Rickey Rickie Ricky Rico Rigoberto Riley Rita River Robb Robbie Robert Roberta Roberto Robin Robyn Rocio Rocky Rod Roderick Rodger Rodolfo Rodrick Rodrigo Roel Rogelio Roger Rogers Rolando Rollin Roma Romaine Roman Ron Ronaldo Ronny Roosevelt Rory Rosa Rosalee Rosalia Rosalind Rosalinda Rosalyn Rosamond Rosanna Rosario Roscoe Rose Rosella Roselyn Rosemarie Rosemary Rosendo Rosetta Rosie Rosina Roslyn Ross Rossie Rowan Rowena Rowland Roxane Roxanne Roy Royal Royce Rozella Ruben Rubie Ruby Rubye Rudolph Rudy Rupert Russ Russel Russell Rusty Ruth Ruthe Ruthie Ryan Ryann Ryder Rylan Rylee Ryleigh Ryley Sabina Sabrina Sabryna Sadie Sadye Sage Saige Sallie Sally Salma Salvador Salvatore Sam Samanta Samantha Samara Samir Sammie Sammy Samson Sandra Sandrine Sandy Sanford Santa Santiago Santina Santino Santos Sarah Sarai Sarina Sasha Saul Savanah Savanna Savannah Savion Scarlett Schuyler Scot Scottie Scotty Seamus Sean Sebastian Sedrick Selena Selina Selmer Serena Serenity Seth Shad Shaina Shakira Shana Shane Shanel Shanelle Shania Shanie Shaniya Shanna Shannon Shanny Shanon Shany Sharon Shaun Shawn Shawna Shaylee Shayna Shayne Shea Sheila Sheldon Shemar Sheridan Sherman Sherwood Shirley Shyann Shyanne Sibyl Sid Sidney Sienna Sierra Sigmund Sigrid Sigurd Silas Sim Simeon Simone Sincere Sister Skye Skyla Skylar Sofia Soledad Solon Sonia Sonny Sonya Sophia Sophie Spencer Stacey Stacy Stan Stanford Stanley Stanton Stefan Stefanie Stella Stephan Stephania Stephanie Stephany Stephen Stephon Sterling Steve Stevie Stewart Stone Stuart Summer Sunny Susan Susana Susanna Susie Suzanne Sven Syble Sydnee Sydney Sydni Sydnie Sylvan Sylvester Sylvia Tabitha Tad Talia Talon Tamara Tamia Tania Tanner Tanya Tara Taryn Tate Tatum Tatyana Taurean Tavares Taya Taylor Teagan Ted Telly Terence Teresa Terrance Terrell Terrence Terrill Terry Tess Tessie Tevin Thad Thaddeus Thalia Thea Thelma Theo Theodora Theodore Theresa Therese Theresia Theron Thomas Thora Thurman Tia Tiana Tianna Tiara Tierra Tiffany Tillman Timmothy Timmy Timothy Tina Tito Titus Tobin Toby Tod Tom Tomas Tomasa Tommie Toney Toni Tony Torey Torrance Torrey Toy Trace Tracey Tracy Travis Travon Tre Tremaine Tremayne Trent Trenton Tressa Tressie Treva Trever Trevion Trevor Trey Trinity Trisha Tristian Tristin Triston Troy Trudie Trycia Trystan Turner Twila Tyler Tyra Tyree Tyreek Tyrel Tyrell Tyrese Tyrique Tyshawn Tyson Ubaldo Ulices Ulises Una Unique Urban Uriah Uriel Ursula Vada Valentin Valentina Valentine Valerie Vallie Van Vance Vanessa Vaughn Veda Velda Vella Velma Velva Vena Verda Verdie Vergie Verla Verlie Vern Verna Verner Vernice Vernie Vernon Verona Veronica Vesta Vicenta Vicente Vickie Vicky Victor Victoria Vida Vidal Vilma Vince Vincent Vincenza Vincenzo Vinnie Viola Violet Violette Virgie Virgil Virginia Virginie Vita Vito Viva Vivian Viviane Vivianne Vivien Vivienne Vladimir Wade Waino Waldo Walker Wallace Walter Walton Wanda Ward Warren Watson Wava Waylon Wayne Webster Weldon Wellington Wendell Wendy Werner Westley Weston Whitney Wilber Wilbert Wilburn Wiley Wilford Wilfred Wilfredo Wilfrid Wilhelm Wilhelmine Will Willa Willard William Willie Willis Willow Willy Wilma Wilmer Wilson Wilton Winfield Winifred Winnifred Winona Winston Woodrow Wyatt Wyman Xander Xavier Xzavier Yadira Yasmeen Yasmin Yasmine Yazmin Yesenia Yessenia Yolanda Yoshiko Yvette Yvonne Zachariah Zachary Zachery Zack Zackary Zackery Zakary Zander Zane Zaria Zechariah Zelda Zella Zelma Zena Zetta Zion Zita Zoe Zoey Zoie Zoila Zola Zora Zul".split(" ");
+a.definitions.last_name="Abbott Abernathy Abshire Adams Altenwerth Anderson Ankunding Armstrong Auer Aufderhar Bahringer Bailey Balistreri Barrows Bartell Bartoletti Barton Bashirian Batz Bauch Baumbach Bayer Beahan Beatty Bechtelar Becker Bednar Beer Beier Berge Bergnaum Bergstrom Bernhard Bernier Bins Blanda Blick Block Bode Boehm Bogan Bogisich Borer Bosco Botsford Boyer Boyle Bradtke Brakus Braun Breitenberg Brekke Brown Bruen Buckridge Carroll Carter Cartwright Casper Cassin Champlin Christiansen Cole Collier Collins Conn Connelly Conroy Considine Corkery Cormier Corwin Cremin Crist Crona Cronin Crooks Cruickshank Cummerata Cummings Dach D'Amore Daniel Dare Daugherty Davis Deckow Denesik Dibbert Dickens Dicki Dickinson Dietrich Donnelly Dooley Douglas Doyle DuBuque Durgan Ebert Effertz Eichmann Emard Emmerich Erdman Ernser Fadel Fahey Farrell Fay Feeney Feest Feil Ferry Fisher Flatley Frami Franecki Friesen Fritsch Funk Gaylord Gerhold Gerlach Gibson Gislason Gleason Gleichner Glover Goldner Goodwin Gorczany Gottlieb Goyette Grady Graham Grant Green Greenfelder Greenholt Grimes Gulgowski Gusikowski Gutkowski Gu\u00aaann Haag Hackett Hagenes Hahn Haley Halvorson Hamill Hammes Hand Hane Hansen Harber Harris Har\u00aaann Harvey Hauck Hayes Heaney Heathcote Hegmann Heidenreich Heller Herman Hermann Hermiston Herzog Hessel Hettinger Hickle Hilll Hills Hilpert Hintz Hirthe Hodkiewicz Hoeger Homenick Hoppe Howe Howell Hudson Huel Huels Hyatt Jacobi Jacobs Jacobson Jakubowski Jaskolski Jast Jenkins Jerde Jewess Johns Johnson Johnston Jones Kassulke Kautzer Keebler Keeling Kemmer Kerluke Kertzmann Kessler Kiehn Kihn Kilback King Kirlin Klein Kling Klocko Koch Koelpin Koepp Kohler Konopelski Koss Kovacek Kozey Krajcik Kreiger Kris Kshlerin Kub Kuhic Kuhlman Kuhn Kulas Kunde Kunze Kuphal Kutch Kuvalis Labadie Lakin Lang Langosh Langworth Larkin Larson Leannon Lebsack Ledner Leffler Legros Lehner Lemke Lesch Leuschke Lind Lindgren Littel Little Lockman Lowe Lubowitz Lueilwitz Luettgen Lynch Macejkovic Maggio Mann Mante Marks Marquardt Marvin Mayer Mayert McClure McCullough McDermott McGlynn McKenzie McLaughlin Medhurst Mertz Metz Miller Mills Mitchell Moen Mohr Monahan Moore Morar Morissette Mosciski Mraz Mueller Muller Murazik Murphy Murray Nader Nicolas Nienow Nikolaus Nitzsche Nolan Oberbrunner O'Connell O'Conner O'Hara O'Keefe O'Kon Okuneva Olson Ondricka O'Reilly Orn Ortiz Osinski Pacocha Padberg Pagac Parisian Parker Paucek Pfannerstill Pfeffer Pollich Pouros Powlowski Predovic Price Prohaska Prosacco Purdy Quigley Quitzon Rath Ratke Rau Raynor Reichel Reichert Reilly Reinger Rempel Renner Reynolds Rice Rippin Ritchie Robel Roberts Rodriguez Rogahn Rohan Rolfson Romaguera Roob Rosenbaum Rowe Ruecker Runolfsdottir Runolfsson Runte Russel Rutherford Ryan Sanford Satterfield Sauer Sawayn Schaden Schaefer Schamberger Schiller Schimmel Schinner Schmeler Schmidt Schmitt Schneider Schoen Schowalter Schroeder Schulist Schultz Schumm Schuppe Schuster Senger Shanahan Shields Simonis Sipes Skiles Smith Smitham Spencer Spinka Sporer Stamm Stanton Stark Stehr Steuber Stiedemann Stokes Stoltenberg Stracke Streich Stroman Strosin Swaniawski Swift Terry Thiel Thompson Tillman Torp Torphy Towne Toy Trantow Tremblay Treutel Tromp Turcotte Turner Ullrich Upton Vandervort Veum Volkman Von VonRueden Waelchi Walker Walsh Walter Ward Waters Watsica Weber Wehner Weimann Weissnat Welch West White Wiegand Wilderman Wilkinson Will Williamson Willms Windler Wintheiser Wisoky Wisozk Witting Wiza Wolf Wolff Wuckert Wunsch Wyman Yost Yundt Zboncak Zemlak Ziemann Zieme Zulauf".split(" ");
+a.definitions.name_prefix=["Mr.","Mrs.","Ms.","Miss","Dr."];a.definitions.name_suffix="Jr. Sr. I II III IV V MD DDS PhD DVM".split(" ");a.definitions.br_state="Acre;Alagoas;Amap\u00e1;Amazonas;Bahia;Cear\u00e1;Distrito Federal;Esp\u00edrito Santo;Goi\u00e1s;Maranh\u00e3o;Mato Grosso;Mato Grosso do Sul;Minas Gerais;Paran\u00e1;Para\u00edba;Par\u00e1;Pernambuco;Piau\u00ed;Rio de Janeiro;Rio Grande do Norte;Rio Grande do Sul;Rond\u00f4nia;Roraima;Santa Catarina;Sergipe;S\u00e3o Paulo;Tocantins".split(";");
+a.definitions.br_state_abbr="AC AL AP AM BA CE DF ES GO MA MT MS MG PR PB PA PE PI RJ RN RS RO RR SC SE SP TO".split(" ");a.definitions.us_state="Alabama;Alaska;Arizona;Arkansas;California;Colorado;Connecticut;Delaware;Florida;Georgia;Hawaii;Idaho;Illinois;Indiana;Iowa;Kansas;Kentucky;Louisiana;Maine;Maryland;Massachusetts;Michigan;Minnesota;Mississippi;Missouri;Montana;Nebraska;Nevada;New Hampshire;New Jersey;New Mexico;New York;North Carolina;North Dakota;Ohio;Oklahoma;Oregon;Pennsylvania;Rhode Island;South Carolina;South Dakota;Tennessee;Texas;Utah;Vermont;Virginia;Washington;West Virginia;Wisconsin;Wyoming".split(";");
+a.definitions.us_state_abbr="AL AK AS AZ AR CA CO CT DE DC FM FL GA GU HI ID IL IN IA KS KY LA ME MH MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND MP OH OK OR PW PA PR RI SC SD TN TX UT VT VI VA WA WV WI WY AE AA AP".split(" ");a.definitions.city_prefix="North East West South New Lake Port".split(" ");a.definitions.city_suffix="town ton land ville berg burgh borough bury view port mouth stad furt chester mouth fort haven side shire".split(" ");a.definitions.street_suffix="Alley Avenue Branch Bridge Brook Brooks Burg Burgs Bypass Camp Canyon Cape Causeway Center Centers Circle Circles Cliff Cliffs Club Common Corner Corners Course Court Courts Cove Coves Creek Crescent Crest Crossing Crossroad Curve Dale Dam Divide Drive Drive Drives Estate Estates Expressway Extension Extensions Fall Falls Ferry Field Fields Flat Flats Ford Fords Forest Forge Forges Fork Forks Fort Freeway Garden Gardens Gateway Glen Glens Green Greens Grove Groves Harbor Harbors Haven Heights Highway Hill Hills Hollow Inlet Inlet Island Island Islands Islands Isle Isle Junction Junctions Key Keys Knoll Knolls Lake Lakes Land Landing Lane Light Lights Loaf Lock Locks Locks Lodge Lodge Loop Mall Manor Manors Meadow Meadows Mews Mill Mills Mission Mission Motorway Mount Mountain Mountain Mountains Mountains Neck Orchard Oval Overpass Park Parks Parkway Parkways Pass Passage Path Pike Pine Pines Place Plain Plains Plains Plaza Plaza Point Points Port Port Ports Ports Prairie Prairie Radial Ramp Ranch Rapid Rapids Rest Ridge Ridges River Road Road Roads Roads Route Row Rue Run Shoal Shoals Shore Shores Skyway Spring Springs Springs Spur Spurs Square Square Squares Squares Station Station Stravenue Stravenue Stream Stream Street Street Streets Summit Summit Terrace Throughway Trace Track Trafficway Trail Trail Tunnel Tunnel Turnpike Turnpike Underpass Union Unions Valley Valleys Via Viaduct View Views Village Village Villages Ville Vista Vista Walk Walks Wall Way Ways Well Wells".split(" ");
+a.definitions.uk_county="Avon;Bedfordshire;Berkshire;Borders;Buckinghamshire;Cambridgeshire;Central;Cheshire;Cleveland;Clwyd;Cornwall;County Antrim;County Armagh;County Down;County Fermanagh;County Londonderry;County Tyrone;Cumbria;Derbyshire;Devon;Dorset;Dumfries and Galloway;Durham;Dyfed;East Sussex;Essex;Fife;Gloucestershire;Grampian;Greater Manchester;Gwent;Gwynedd County;Hampshire;Herefordshire;Hertfordshire;Highlands and Islands;Humberside;Isle of Wight;Kent;Lancashire;Leicestershire;Lincolnshire;Lothian;Merseyside;Mid Glamorgan;Norfolk;North Yorkshire;Northamptonshire;Northumberland;Nottinghamshire;Oxfordshire;Powys;Rutland;Shropshire;Somerset;South Glamorgan;South Yorkshire;Staffordshire;Strathclyde;Suffolk;Surrey;Tayside;Tyne and Wear;Warwickshire;West Glamorgan;West Midlands;West Sussex;West Yorkshire;Wiltshire;Worcestershire".split(";");
+a.definitions.uk_country=["England","Scotland","Wales","Northern Ireland"];a.definitions.catch_phrase_adjective="Adaptive;Advanced;Ameliorated;Assimilated;Automated;Balanced;Business-focused;Centralized;Cloned;Compatible;Configurable;Cross-group;Cross-platform;Customer-focused;Customizable;Decentralized;De-engineered;Devolved;Digitized;Distributed;Diverse;Down-sized;Enhanced;Enterprise-wide;Ergonomic;Exclusive;Expanded;Extended;Face to face;Focused;Front-line;Fully-configurable;Function-based;Fundamental;Future-proofed;Grass-roots;Horizontal;Implemented;Innovative;Integrated;Intuitive;Inverse;Managed;Mandatory;Monitored;Multi-channelled;Multi-lateral;Multi-layered;Multi-tiered;Networked;Object-based;Open-architected;Open-source;Operative;Optimized;Optional;Organic;Organized;Persevering;Persistent;Phased;Polarised;Pre-emptive;Proactive;Profit-focused;Profound;Programmable;Progressive;Public-key;Quality-focused;Reactive;Realigned;Re-contextualized;Re-engineered;Reduced;Reverse-engineered;Right-sized;Robust;Seamless;Secured;Self-enabling;Sharable;Stand-alone;Streamlined;Switchable;Synchronised;Synergistic;Synergized;Team-oriented;Total;Triple-buffered;Universal;Up-sized;Upgradable;User-centric;User-friendly;Versatile;Virtual;Visionary;Vision-oriented".split(";");
+a.definitions.catch_phrase_descriptor="24 hour;24/7;3rd generation;4th generation;5th generation;6th generation;actuating;analyzing;assymetric;asynchronous;attitude-oriented;background;bandwidth-monitored;bi-directional;bifurcated;bottom-line;clear-thinking;client-driven;client-server;coherent;cohesive;composite;context-sensitive;contextually-based;content-based;dedicated;demand-driven;didactic;directional;discrete;disintermediate;dynamic;eco-centric;empowering;encompassing;even-keeled;executive;explicit;exuding;fault-tolerant;foreground;fresh-thinking;full-range;global;grid-enabled;heuristic;high-level;holistic;homogeneous;human-resource;hybrid;impactful;incremental;intangible;interactive;intermediate;leading edge;local;logistical;maximized;methodical;mission-critical;mobile;modular;motivating;multimedia;multi-state;multi-tasking;national;needs-based;neutral;next generation;non-volatile;object-oriented;optimal;optimizing;radical;real-time;reciprocal;regional;responsive;scalable;secondary;solution-oriented;stable;static;systematic;systemic;system-worthy;tangible;tertiary;transitional;uniform;upward-trending;user-facing;value-added;web-enabled;well-modulated;zero administration;zero defect;zero tolerance".split(";");
+a.definitions.catch_phrase_noun="ability;access;adapter;algorithm;alliance;analyzer;application;approach;architecture;archive;artificial intelligence;array;attitude;benchmark;budgetary management;capability;capacity;challenge;circuit;collaboration;complexity;concept;conglomeration;contingency;core;customer loyalty;database;data-warehouse;definition;emulation;encoding;encryption;extranet;firmware;flexibility;focus group;forecast;frame;framework;function;functionalities;Graphic Interface;groupware;Graphical User Interface;hardware;help-desk;hierarchy;hub;implementation;info-mediaries;infrastructure;initiative;installation;instruction set;interface;internet solution;intranet;knowledge user;knowledge base;local area network;leverage;matrices;matrix;methodology;middleware;migration;model;moderator;monitoring;moratorium;neural-net;open architecture;open system;orchestration;paradigm;parallelism;policy;portal;pricing structure;process improvement;product;productivity;project;projection;protocol;secured line;service-desk;software;solution;standardization;strategy;structure;success;superstructure;support;synergy;system engine;task-force;throughput;time-frame;toolset;utilisation;website;workforce".split(";");
+a.definitions.bs_adjective="implement utilize integrate streamline optimize evolve transform embrace enable orchestrate leverage reinvent aggregate architect enhance incentivize morph empower envisioneer monetize harness facilitate seize disintermediate synergize strategize deploy brand grow target syndicate synthesize deliver mesh incubate engage maximize benchmark expedite reintermediate whiteboard visualize repurpose innovate scale unleash drive extend engineer revolutionize generate exploit transition e-enable iterate cultivate matrix productize redefine recontextualize".split(" ");
+a.definitions.bs_buzz="clicks-and-mortar value-added vertical proactive robust revolutionary scalable leading-edge innovative intuitive strategic e-business mission-critical sticky one-to-one 24/7 end-to-end global B2B B2C granular frictionless virtual viral dynamic 24/365 best-of-breed killer magnetic bleeding-edge web-enabled interactive dot-com sexy back-end real-time efficient front-end distributed seamless extensible turn-key world-class open-source cross-platform cross-media synergistic bricks-and-clicks out-of-the-box enterprise integrated impactful wireless transparent next-generation cutting-edge user-centric visionary customized ubiquitous plug-and-play collaborative compelling holistic rich".split(" ");
+a.definitions.bs_noun="synergies;web-readiness;paradigms;markets;partnerships;infrastructures;platforms;initiatives;channels;eyeballs;communities;ROI;solutions;e-tailers;e-services;action-items;portals;niches;technologies;content;vortals;supply-chains;convergence;relationships;architectures;interfaces;e-markets;e-commerce;systems;bandwidth;infomediaries;models;mindshare;deliverables;users;schemas;networks;applications;metrics;e-business;functionalities;experiences;web services;methodologies".split(";");
+a.definitions.domain_suffix="co.uk com us net ca biz info name io org biz tv me".split(" ");a.definitions.lorem="alias consequatur aut perferendis sit voluptatem accusantium doloremque aperiam eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo aspernatur aut odit aut fugit sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt neque dolorem ipsum quia dolor sit amet consectetur adipisci velit sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem ut enim ad minima veniam quis nostrum exercitationem ullam corporis nemo enim ipsam voluptatem quia voluptas sit suscipit laboriosam nisi ut aliquid ex ea commodi consequatur quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae et iusto odio dignissimos ducimus qui blanditiis praesentium laudantium totam rem voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident sed ut perspiciatis unde omnis iste natus error similique sunt in culpa qui officia deserunt mollitia animi id est laborum et dolorum fuga et harum quidem rerum facilis est et expedita distinctio nam libero tempore cum soluta nobis est eligendi optio cumque nihil impedit quo porro quisquam est qui minus id quod maxime placeat facere possimus omnis voluptas assumenda est omnis dolor repellendus temporibus autem quibusdam et aut consequatur vel illum qui dolorem eum fugiat quo voluptas nulla pariatur at vero eos et accusamus officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae itaque earum rerum hic tenetur a sapiente delectus ut aut reiciendis voluptatibus maiores doloribus asperiores repellat".split(" ");
+a.definitions.phone_formats="###-###-####;(###)###-####;1-###-###-####;###.###.####;###-###-####;(###)###-####;1-###-###-####;###.###.####;###-###-#### x###;(###)###-#### x###;1-###-###-#### x###;###.###.#### x###;###-###-#### x####;(###)###-#### x####;1-###-###-#### x####;###.###.#### x####;###-###-#### x#####;(###)###-#### x#####;1-###-###-#### x#####;###.###.#### x#####".split(";");var c=a.definitions,e=a.Helpers;"function"==typeof define?define(function(){return a}):"undefined"!==typeof module&&
+module.exports?module.exports=a:window.Faker=a}();
diff --git a/Readme.md b/Readme.md
index 825c5c83..2ca6dfd1 100644
--- a/Readme.md
+++ b/Readme.md
@@ -15,12 +15,16 @@
var randomEmail = Faker.Internet.email(); // [email protected]
var randomCard = Faker.Helpers.createCard(); // random contact card containing many properties
## API
-<ul><li>Name<ul><li>findName</li><li>firstName</li><li>lastName</li></ul></li><li>Address<ul><li>zipCode</li><li>zipCodeFormat</li><li>city</li><li>streetName</li><li>streetAddress</li><li>secondaryAddress</li><li>brState</li><li>ukCounty</li><li>ukCountry</li><li>usState</li></ul></li><li>PhoneNumber<ul><li>phoneNumber</li><li>phoneNumberFormat</li></ul></li><li>Internet<ul><li>email</li><li>userName</li><li>domainName</li><li>domainWord</li><li>ip</li></ul></li><li>Company<ul><li>companyName</li><li>companySuffix</li><li>catchPhrase</li><li>bs</li></ul></li><li>Lorem<ul><li>words</li><li>sentence</li><li>sentences</li><li>paragraph</li><li>paragraphs</li></ul></li><li>Helpers<ul><li>randomNumber</li><li>randomize</li><li>replaceSymbolWithNumber</li><li>shuffle</li><li>generateDataSet</li><li>createCard</li><li>userCard</li></ul></li><li>definitions<ul><li>first_name</li><li>last_name</li><li>name_prefix</li><li>name_suffix</li><li>br_state</li><li>br_state_abbr</li><li>us_state</li><li>us_state_abbr</li><li>city_prefix</li><li>city_suffix</li><li>street_suffix</li><li>uk_county</li><li>uk_country</li><li>catch_phrase_adjective</li><li>catch_phrase_descriptor</li><li>catch_phrase_noun</li><li>bs_adjective</li><li>bs_buzz</li><li>bs_noun</li><li>domain_suffix</li><li>lorem</li><li>phone_formats</li></ul></li></ul>
+<ul><li>Name<ul><li>firstName</li><li>lastName</li><li>findName</li></ul></li><li>Address<ul><li>zipCode</li><li>zipCodeFormat</li><li>city</li><li>streetName</li><li>streetAddress</li><li>secondaryAddress</li><li>brState</li><li>ukCounty</li><li>ukCountry</li><li>usState</li><li>latitude</li><li>longitude</li></ul></li><li>PhoneNumber<ul><li>phoneNumber</li><li>phoneNumberFormat</li></ul></li><li>Internet<ul><li>email</li><li>userName</li><li>domainName</li><li>domainWord</li><li>ip</li></ul></li><li>Company<ul><li>suffixes</li><li>companyName</li><li>companySuffix</li><li>catchPhrase</li><li>bs</li></ul></li><li>Lorem<ul><li>words</li><li>sentence</li><li>sentences</li><li>paragraph</li><li>paragraphs</li></ul></li><li>Helpers<ul><li>randomNumber</li><li>randomize</li><li>slugify</li><li>replaceSymbolWithNumber</li><li>shuffle</li><li>createCard</li><li>userCard</li></ul></li><li>random<ul><li>number</li><li>array_element</li><li>city_prefix</li><li>city_suffix</li><li>street_suffix</li><li>br_state</li><li>br_state_abbr</li><li>us_state</li><li>us_state_abbr</li><li>uk_county</li><li>uk_country</li><li>first_name</li><li>last_name</li><li>name_prefix</li><li>name_suffix</li><li>catch_phrase_adjective</li><li>catch_phrase_descriptor</li><li>catch_phrase_noun</li><li>bs_adjective</li><li>bs_buzz</li><li>bs_noun</li><li>phone_formats</li><li>domain_suffix</li></ul></li><li>definitions<ul><li>first_name</li><li>last_name</li><li>name_prefix</li><li>name_suffix</li><li>br_state</li><li>br_state_abbr</li><li>us_state</li><li>us_state_abbr</li><li>city_prefix</li><li>city_suffix</li><li>street_suffix</li><li>uk_county</li><li>uk_country</li><li>catch_phrase_adjective</li><li>catch_phrase_descriptor</li><li>catch_phrase_noun</li><li>bs_adjective</li><li>bs_buzz</li><li>bs_noun</li><li>domain_suffix</li><li>lorem</li><li>phone_formats</li></ul></li></ul>
+## Tests
+ npm install .
+ make test
+You can view a code coverage report generated in coverage/lcov-report/index.html.
## Authors
####Matthew Bergman & Marak Squires
Heavily inspired by Benjamin Curtis's Ruby Gem [Faker](http://faker.rubyforge.org/) and Perl's [Data::Faker](http://search.cpan.org/~jasonk/Data-Faker-0.07/lib/Data/Faker.pm)
<br/>
-Copyright (c) 2010 Matthew Bergman & Marak Squires http://github.com/marak/Faker.js/
+Copyright (c) 2014 Matthew Bergman & Marak Squires http://github.com/marak/Faker.js/
<br/>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@@ -39,4 +43,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/tests/browser_test.html b/examples/browser_test.html
index 91511cdf..91511cdf 100644
--- a/tests/browser_test.html
+++ b/examples/browser_test.html
diff --git a/examples/js/Faker.js b/examples/js/Faker.js
index 1a0c048b..7f2e1660 100644
--- a/examples/js/Faker.js
+++ b/examples/js/Faker.js
@@ -17,7 +17,7 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-/*************** AUTOGENERATED @ 1345801740093 ***************
+/*************** AUTOGENERATED @ 1371016897413 ***************
WARNING: THIS FILE WAS AUTOGENERATED BY THE FAKER BUILD SCRIPT
MODIFYING THIS FILE IS FINE, BUT YOU REALLY SHOULD BE MODIFYING
THE LIBRARY DIRECTLY AND REGENERATING THIS FILE USING BUILD.js!!!!
@@ -36,465 +36,502 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
var randomEmail = Faker.Internet.email(); // [email protected]
var randomCard = Faker.Helpers.createCard(); // random contact card containing many properties
*/
+!(function(){
+'use strict';
+// exported module
var Faker = {};
Faker.version = "0.5.5";
Faker.Name = {};
-Faker.Name.findName = function () {
- var r = Helpers.randomNumber(8);
- switch(r)
- {
- case 0:
- return Helpers.randomize(definitions.name_prefix()) + " " + Helpers.randomize(definitions.first_name()) + " " + Helpers.randomize(definitions.last_name());
- break;
- case 1:
- return Helpers.randomize(definitions.first_name()) + " " + Helpers.randomize(definitions.last_name()); + " " + Helpers.randomize(definitions.name_suffix);
- break;
- }
-
- return Helpers.randomize(definitions.first_name()) + " " + Helpers.randomize(definitions.last_name());
-
-};
-
Faker.Name.firstName = function () {
- return Helpers.randomize(definitions.first_name());
-};
+ return Faker.random.first_name();
+ };
Faker.Name.lastName = function () {
- return Helpers.randomize(definitions.last_name());
-};
+ return Faker.random.last_name();
+ };
+
+Faker.Name.findName = function () {
+ var r = Faker.random.number(8);
+ switch (r) {
+ case 0:
+ return Faker.random.name_prefix() + " " + this.firstName() + " " + this.lastName();
+ case 1:
+ return this.firstName() + " " + this.lastName() + " " + Faker.random.name_suffix();
+ }
+
+ return this.firstName() + " " + this.lastName();
+ };
Faker.Address = {};
Faker.Address.zipCode = function () {
- return Helpers.replaceSymbolWithNumber(Helpers.randomize(["#####", '#####-####']));
-};
+ return Helpers.replaceSymbolWithNumber(Faker.random.array_element(["#####", '#####-####']));
+ };
-Faker.Address.zipCodeFormat = function ( format ) {
- return Helpers.replaceSymbolWithNumber( ["#####", '#####-####'][format] );
-};
+Faker.Address.zipCodeFormat = function (format) {
+ return Helpers.replaceSymbolWithNumber(["#####", '#####-####'][format]);
+ };
Faker.Address.city = function () {
- switch(Helpers.randomNumber(3))
- {
- case 0:
- return Helpers.randomize(definitions.city_prefix()) + " " + Helpers.randomize(definitions.first_name()) + Helpers.randomize(definitions.city_suffix());
- break;
- case 1:
- return Helpers.randomize(definitions.city_prefix()) + " " + Helpers.randomize(definitions.first_name());
- break;
- case 2:
- return Helpers.randomize(definitions.first_name()) + Helpers.randomize(definitions.city_suffix());
- break;
- case 3:
- return Helpers.randomize(definitions.last_name()) + Helpers.randomize(definitions.city_suffix());
- break;
- }
-};
+ var result;
+ switch (Faker.random.number(4)) {
+ case 0:
+ result = Faker.random.city_prefix() + " " + Faker.random.first_name() + Faker.random.city_suffix();
+ break;
+ case 1:
+ result = Faker.random.city_prefix() + " " + Faker.random.first_name();
+ break;
+ case 2:
+ result = Faker.random.first_name() + Faker.random.city_suffix();
+ break;
+ case 3:
+ result = Faker.random.last_name() + Faker.random.city_suffix();
+ break;
+ }
+ return result;
+ };
Faker.Address.streetName = function () {
- switch(Helpers.randomNumber(1))
- {
- case 0:
- return Helpers.randomize(definitions.last_name()) + " " + Helpers.randomize(definitions.street_suffix());
- break;
- case 1:
- return Helpers.randomize(definitions.first_name()) + " " + Helpers.randomize(definitions.street_suffix());
- break;
- }
-};
-
-Faker.Address.streetAddress = function (i) {
- if( typeof i == 'undefined'){ var i = false;}
- var address = "";
- switch(Helpers.randomNumber(2))
- {
- case 0:
- address = Helpers.replaceSymbolWithNumber("#####") + " " + this.streetName();
- break;
- case 1:
- address = Helpers.replaceSymbolWithNumber("####") + " " + this.streetName();
- break;
- case 2:
- address = Helpers.replaceSymbolWithNumber("###") + " " + this.streetName();
- break;
- }
- var full_address = i ? address + " " + this.secondaryAddress() : address;
- return full_address;
-};
+ var result;
+ switch (Faker.random.number(2)) {
+ case 0:
+ result = Faker.random.last_name() + " " + Faker.random.street_suffix();
+ break;
+ case 1:
+ result = Faker.random.first_name() + " " + Faker.random.street_suffix();
+ break;
+ }
+ return result;
+ };
+
+Faker.Address.streetAddress = function (useFullAddress) {
+ if (useFullAddress === undefined) { useFullAddress = false; }
+ var address = "";
+ switch (Faker.random.number(3)) {
+ case 0:
+ address = Helpers.replaceSymbolWithNumber("#####") + " " + this.streetName();
+ break;
+ case 1:
+ address = Helpers.replaceSymbolWithNumber("####") + " " + this.streetName();
+ break;
+ case 2:
+ address = Helpers.replaceSymbolWithNumber("###") + " " + this.streetName();
+ break;
+ }
+ return useFullAddress ? (address + " " + this.secondaryAddress()) : address;
+ };
Faker.Address.secondaryAddress = function () {
- return Helpers.replaceSymbolWithNumber(Helpers.randomize(
- [
- 'Apt. ###',
- 'Suite ###'
- ]
- )
- );
-};
-
-Faker.Address.brState = function ( abbr ) {
- return Helpers.randomize( definitions[ abbr ? 'br_state_abbr' : 'br_state']() );
-};
-
-Faker.Address.ukCounty = function (){
- return Helpers.randomize(definitions.uk_county());
-};
-
-Faker.Address.ukCountry = function (){
- return Helpers.randomize(definitions.uk_country());
-};
-
-Faker.Address.usState = function ( abbr ) {
- return Helpers.randomize( definitions[ abbr ? 'us_state_abbr' : 'us_state']() );
-};
+ return Helpers.replaceSymbolWithNumber(Faker.random.array_element(
+ [
+ 'Apt. ###',
+ 'Suite ###'
+ ]
+ ));
+ };
+
+Faker.Address.brState = function (useAbbr) {
+ return useAbbr ? Faker.random.br_state_abbr() : Faker.random.br_state();
+ };
+
+Faker.Address.ukCounty = function () {
+ return Faker.random.uk_county();
+ };
+
+Faker.Address.ukCountry = function () {
+ return Faker.random.uk_country();
+ };
+
+Faker.Address.usState = function (useAbbr) {
+ return useAbbr ? Faker.random.us_state_abbr() : Faker.random.us_state();
+ };
+
+Faker.Address.latitude = function () {
+ return (Faker.random.number(180 * 10000) / 10000.0 - 90.0).toFixed(4);
+ };
+
+Faker.Address.longitude = function () {
+ return (Faker.random.number(360 * 10000) / 10000.0 - 180.0).toFixed(4);
+ };
Faker.PhoneNumber = {};
-Faker.PhoneNumber.phoneNumber = function (){
-
- return Helpers.replaceSymbolWithNumber(Helpers.randomize(definitions.phone_formats()));
+Faker.PhoneNumber.phoneNumber = function () {
+ return Helpers.replaceSymbolWithNumber(Faker.random.phone_formats());
+ };
-};
-
-Faker.PhoneNumber.phoneNumberFormat = function ( format ){
- return Helpers.replaceSymbolWithNumber(definitions.phone_formats()[format]);
-};
+Faker.PhoneNumber.phoneNumberFormat = function (phoneFormatsArrayIndex) {
+ return Helpers.replaceSymbolWithNumber(definitions.phone_formats[phoneFormatsArrayIndex]);
+ };
Faker.Internet = {};
Faker.Internet.email = function () {
- return this.userName() + "@" + this.domainName();
-};
+ return Faker.Helpers.slugify(this.userName()) + "@" + Faker.Helpers.slugify(this.domainName());
+ };
Faker.Internet.userName = function () {
- switch(Helpers.randomNumber(2))
- {
- case 0:
- return Helpers.randomize(definitions.first_name());
- break;
- case 1:
- return Helpers.randomize(definitions.first_name()) + Helpers.randomize([".", "_"]) + Helpers.randomize(definitions.last_name()) ;
- break;
- }
-};
+ var result;
+ switch (Faker.random.number(2)) {
+ case 0:
+ result = Faker.random.first_name();
+ break;
+ case 1:
+ result = Faker.random.first_name() + Faker.random.array_element([".", "_"]) + Faker.random.last_name();
+ break;
+ }
+ return result;
+ };
Faker.Internet.domainName = function () {
- return this.domainWord() + "." + Helpers.randomize(definitions.domain_suffix());
-};
+ return this.domainWord() + "." + Faker.random.domain_suffix();
+ };
Faker.Internet.domainWord = function () {
- return Helpers.randomize(definitions.first_name()).toLowerCase();
-};
+ return Faker.random.first_name().toLowerCase();
+ };
Faker.Internet.ip = function () {
- var randNum = function() {
- return (Math.random()*254 + 1).toFixed(0);
- }
+ var randNum = function () {
+ return (Math.random() * 254 + 1).toFixed(0);
+ };
- var result = [];
- for(var i=0; i<4; i++) {
- result[i] = randNum();
- }
+ var result = [];
+ for (var i = 0; i < 4; i++) {
+ result[i] = randNum();
+ }
- return result.join(".");
-};
+ return result.join(".");
+ };
Faker.Company = {};
-Faker.Company.companyName = function ( format ) {
- switch( ( format ? format : Helpers.randomNumber(3) ) )
- {
- case 0:
- return Helpers.randomize(definitions.last_name()) + " " + this.companySuffix();
- break;
- case 1:
- return Helpers.randomize(definitions.last_name()) + "-" + Helpers.randomize(definitions.last_name()) ;
- break;
- case 2:
- return Helpers.randomize(definitions.last_name()) + "," + Helpers.randomize(definitions.last_name()) + " and " + Helpers.randomize(definitions.last_name());
- break;
- }
-};
+Faker.Company.suffixes = function () {
+ return ["Inc", "and Sons", "LLC", "Group", "and Daughters"];
+ };
+
+Faker.Company.companyName = function (format) {
+ switch ((format ? format : Faker.random.number(3))) {
+ case 0:
+ return Faker.Name.lastName() + " " + this.companySuffix();
+ case 1:
+ return Faker.Name.lastName() + "-" + Faker.Name.lastName();
+ case 2:
+ return Faker.Name.lastName() + ", " + Faker.Name.lastName() + " and " + Faker.Name.lastName();
+ }
+ };
Faker.Company.companySuffix = function () {
- return Helpers.randomize(["Inc", "and\ Sons", "LLC", "Group", "and\ Daughters"]);
-};
+ return Faker.random.array_element(this.suffixes());
+ };
Faker.Company.catchPhrase = function () {
- return Helpers.randomize(definitions.catch_phrase_adjective()) + " " + Helpers.randomize(definitions.catch_phrase_descriptor()) + " "+ Helpers.randomize(definitions.catch_phrase_noun());
-};
+ return Faker.random.catch_phrase_adjective() + " " +
+ Faker.random.catch_phrase_descriptor() + " " +
+ Faker.random.catch_phrase_noun();
+ };
Faker.Company.bs = function () {
- return Helpers.randomize(definitions.bs_adjective()) + " " + Helpers.randomize(definitions.bs_buzz()) + " "+ Helpers.randomize(definitions.bs_noun());
-};
+ return Faker.random.bs_adjective() + " " +
+ Faker.random.bs_buzz() + " " +
+ Faker.random.bs_noun();
+ };
Faker.Lorem = {};
-Faker.Lorem.words = function (num){
- if( typeof num == 'undefined'){ var num = 3;}
- return Helpers.shuffle(definitions.lorem()).slice(0, num);
- //Words.shuffle[0, num]
-};
-
-Faker.Lorem.sentence = function (wordCount){
- if( typeof wordCount == 'undefined'){ var wordCount = 3;}
-
- // strange issue with the node_min_test failing for captialize, please fix and add this back
- //return this.words(wordCount + Helpers.randomNumber(7)).join(' ').capitalize();
-
- return this.words(wordCount + Helpers.randomNumber(7)).join(' ');
-};
-
-Faker.Lorem.sentences = function (sentenceCount){
- if( typeof sentenceCount == 'undefined'){ var sentenceCount = 3;}
- var sentences = [];
- for(sentenceCount; sentenceCount >= 0; sentenceCount--){
- sentences.push(this.sentence());
- }
- return sentences.join("\n");
-};
-
-Faker.Lorem.paragraph = function (sentenceCount){
- if( typeof sentenceCount == 'undefined'){ var sentenceCount = 3;}
- return this.sentences(sentenceCount + Helpers.randomNumber(3));
-};
-
-Faker.Lorem.paragraphs = function (paragraphCount){
- if( typeof paragraphCount == 'undefined'){ var paragraphCount = 3;}
- var paragraphs = [];
- for(paragraphCount; paragraphCount >= 0; paragraphCount--){
- paragraphs.push(this.paragraph());
- }
- return paragraphs.join("\n \r\t");
-};
+Faker.Lorem.words = function (num) {
+ if (typeof num == 'undefined') { num = 3; }
+ return Helpers.shuffle(definitions.lorem).slice(0, num);
+ };
+
+Faker.Lorem.sentence = function (wordCount, range) {
+ if (typeof wordCount == 'undefined') { wordCount = 3; }
+ if (typeof range == 'undefined') { range = 7; }
+
+ // strange issue with the node_min_test failing for captialize, please fix and add this back
+ //return this.words(wordCount + Helpers.randomNumber(range)).join(' ').capitalize();
+
+ return this.words(wordCount + Faker.random.number(7)).join(' ');
+ };
+
+Faker.Lorem.sentences = function (sentenceCount) {
+ if (typeof sentenceCount == 'undefined') { sentenceCount = 3; }
+ var sentences = [];
+ for (sentenceCount; sentenceCount > 0; sentenceCount--) {
+ sentences.push(this.sentence());
+ }
+ return sentences.join("\n");
+ };
+
+Faker.Lorem.paragraph = function (sentenceCount) {
+ if (typeof sentenceCount == 'undefined') { sentenceCount = 3; }
+ return this.sentences(sentenceCount + Faker.random.number(3));
+ };
+
+Faker.Lorem.paragraphs = function (paragraphCount) {
+ if (typeof paragraphCount == 'undefined') { paragraphCount = 3; }
+ var paragraphs = [];
+ for (paragraphCount; paragraphCount > 0; paragraphCount--) {
+ paragraphs.push(this.paragraph());
+ }
+ return paragraphs.join("\n \r\t");
+ };
Faker.Helpers = {};
Faker.Helpers.randomNumber = function (range) {
- var r = Math.floor(Math.random()*range);
- return r;
+ return Faker.random.number(range);
};
Faker.Helpers.randomize = function (array) {
- var r = Math.floor(Math.random()*array.length);
- return array[r];
+ return Faker.random.array_element(array);
};
-Faker.Helpers.replaceSymbolWithNumber = function (string, symbol){
-
- // default symbol is '#'
- if(typeof symbol == 'undefined'){
- var symbol = '#';
- }
-
- var str = '';
- for(var i = 0; i < string.length; i++){
- if(string[i] == symbol){
- str += Math.floor(Math.random()*10);
- }
- else{
- str += string[i];
- }
- }
- return str;
+Faker.Helpers.slugify = function (string) {
+ return string.replace(/ /g, '-').replace(/[^\w\.\-]+/g, '');
};
-Faker.Helpers.shuffle = function (o){
- for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
- return o;
-};
+Faker.Helpers.replaceSymbolWithNumber = function (string, symbol) {
+ // default symbol is '#'
+ if (symbol === undefined) {
+ symbol = '#';
+ }
-Faker.Helpers.generateDataSet = function (size){
+ var str = '';
+ for (var i = 0; i < string.length; i++) {
+ if (string[i] == symbol) {
+ str += Math.floor(Math.random() * 10);
+ } else {
+ str += string[i];
+ }
+ }
+ return str;
+};
+
+Faker.Helpers.shuffle = function (o) {
+ for (var j, x, i = o.length; i; j = parseInt(Math.random() * i, 10), x = o[--i], o[i] = o[j], o[j] = x);
+ return o;
+};
+
+Faker.Helpers.createCard = function () {
+ return {
+ "name": Faker.Name.findName(),
+ "username": Faker.Internet.userName(),
+ "email": Faker.Internet.email(),
+ "address": {
+ "streetA": Faker.Address.streetName(),
+ "streetB": Faker.Address.streetAddress(),
+ "streetC": Faker.Address.streetAddress(true),
+ "streetD": Faker.Address.secondaryAddress(),
+ "city": Faker.Address.city(),
+ "ukCounty": Faker.Address.ukCounty(),
+ "ukCountry": Faker.Address.ukCountry(),
+ "zipcode": Faker.Address.zipCode(),
+ "geo": {
+ "lat": Faker.Address.latitude(),
+ "lng": Faker.Address.longitude()
+ }
+ },
+ "phone": Faker.PhoneNumber.phoneNumber(),
+ "website": Faker.Internet.domainName(),
+ "company": {
+ "name": Faker.Company.companyName(),
+ "catchPhrase": Faker.Company.catchPhrase(),
+ "bs": Faker.Company.bs()
+ },
+ "posts": [
+ {
+ "words": Faker.Lorem.words(),
+ "sentence": Faker.Lorem.sentence(),
+ "sentences": Faker.Lorem.sentences(),
+ "paragraph": Faker.Lorem.paragraph()
+ },
+ {
+ "words": Faker.Lorem.words(),
+ "sentence": Faker.Lorem.sentence(),
+ "sentences": Faker.Lorem.sentences(),
+ "paragraph": Faker.Lorem.paragraph()
+ },
+ {
+ "words": Faker.Lorem.words(),
+ "sentence": Faker.Lorem.sentence(),
+ "sentences": Faker.Lorem.sentences(),
+ "paragraph": Faker.Lorem.paragraph()
+ }
+ ]
+ };
+};
+
+Faker.Helpers.userCard = function () {
+ return {
+ "name": Faker.Name.findName(),
+ "username": Faker.Internet.userName(),
+ "email": Faker.Internet.email(),
+ "address": {
+ "street": Faker.Address.streetName(true),
+ "suite": Faker.Address.secondaryAddress(),
+ "city": Faker.Address.city(),
+ "zipcode": Faker.Address.zipCode(),
+ "geo": {
+ "lat": Faker.Address.latitude(),
+ "lng": Faker.Address.longitude()
+ }
+ },
+ "phone": Faker.PhoneNumber.phoneNumber(),
+ "website": Faker.Internet.domainName(),
+ "company": {
+ "name": Faker.Company.companyName(),
+ "catchPhrase": Faker.Company.catchPhrase(),
+ "bs": Faker.Company.bs()
+ }
+ };
+};
+
+Faker.random = {};
+Faker.random.number = function (range) {
+ return Math.floor(Math.random() * range);
+ };
+
+Faker.random.array_element = function (array) {
+ var r = Math.floor(Math.random() * array.length);
+ return array[r];
+ };
+
+Faker.random.city_prefix = function () {
+ return this.array_element(definitions.city_prefix);
+ };
+
+Faker.random.city_suffix = function () {
+ return this.array_element(definitions.city_suffix);
+ };
+
+Faker.random.street_suffix = function () {
+ return this.array_element(definitions.street_suffix);
+ };
+
+Faker.random.br_state = function () {
+ return this.array_element(definitions.br_state);
+ };
+
+Faker.random.br_state_abbr = function () {
+ return this.array_element(definitions.br_state_abbr);
+ };
+
+Faker.random.us_state = function () {
+ return this.array_element(definitions.us_state);
+ };
+
+Faker.random.us_state_abbr = function () {
+ return this.array_element(definitions.us_state_abbr);
+ };
+
+Faker.random.uk_county = function () {
+ return this.array_element(definitions.uk_county);
+ };
+
+Faker.random.uk_country = function () {
+ return this.array_element(definitions.uk_country);
+ };
+
+Faker.random.first_name = function () {
+ return this.array_element(definitions.first_name);
+ };
+
+Faker.random.last_name = function () {
+ return this.array_element(definitions.last_name);
+ };
+
+Faker.random.name_prefix = function () {
+ return this.array_element(definitions.name_prefix);
+ };
+
+Faker.random.name_suffix = function () {
+ return this.array_element(definitions.name_suffix);
+ };
+
+Faker.random.catch_phrase_adjective = function () {
+ return this.array_element(definitions.catch_phrase_adjective);
+ };
+
+Faker.random.catch_phrase_descriptor = function () {
+ return this.array_element(definitions.catch_phrase_descriptor);
+ };
+
+Faker.random.catch_phrase_noun = function () {
+ return this.array_element(definitions.catch_phrase_noun);
+ };
+
+Faker.random.bs_adjective = function () {
+ return this.array_element(definitions.bs_adjective);
+ };
+
+Faker.random.bs_buzz = function () {
+ return this.array_element(definitions.bs_buzz);
+ };
+
+Faker.random.bs_noun = function () {
+ return this.array_element(definitions.bs_noun);
+ };
+
+Faker.random.phone_formats = function () {
+ return this.array_element(definitions.phone_formats);
+ };
+
+Faker.random.domain_suffix = function () {
+ return this.array_element(definitions.domain_suffix);
+ };
-};
+Faker.definitions = {};
+Faker.definitions.first_name = ["Aaliyah","Aaron","Abagail","Abbey","Abbie","Abbigail","Abby","Abdiel","Abdul","Abdullah","Abe","Abel","Abelardo","Abigail","Abigale","Abigayle","Abner","Abraham","Ada","Adah","Adalberto","Adaline","Adam","Adan","Addie","Addison","Adela","Adelbert","Adele","Adelia","Adeline","Adell","Adella","Adelle","Aditya","Adolf","Adolfo","Adolph","Adolphus","Adonis","Adrain","Adrian","Adriana","Adrianna","Adriel","Adrien","Adrienne","Afton","Aglae","Agnes","Agustin","Agustina","Ahmad","Ahmed","Aida","Aidan","Aiden","Aileen","Aimee","Aisha","Aiyana","Akeem","Al","Alaina","Alan","Alana","Alanis","Alanna","Alayna","Alba","Albert","Alberta","Albertha","Alberto","Albin","Albina","Alda","Alden","Alec","Aleen","Alejandra","Alejandrin","Alek","Alena","Alene","Alessandra","Alessandro","Alessia","Aletha","Alex","Alexa","Alexander","Alexandra","Alexandre","Alexandrea","Alexandria","Alexandrine","Alexandro","Alexane","Alexanne","Alexie","Alexis","Alexys","Alexzander","Alf","Alfonso","Alfonzo","Alford","Alfred","Alfreda","Alfredo","Ali","Alia","Alice","Alicia","Alisa","Alisha","Alison","Alivia","Aliya","Aliyah","Aliza","Alize","Allan","Allen","Allene","Allie","Allison","Ally","Alphonso","Alta","Althea","Alva","Alvah","Alvena","Alvera","Alverta","Alvina","Alvis","Alyce","Alycia","Alysa","Alysha","Alyson","Alysson","Amalia","Amanda","Amani","Amara","Amari","Amaya","Amber","Ambrose","Amelia","Amelie","Amely","America","Americo","Amie","Amina","Amir","Amira","Amiya","Amos","Amparo","Amy","Amya","Ana","Anabel","Anabelle","Anahi","Anais","Anastacio","Anastasia","Anderson","Andre","Andreane","Andreanne","Andres","Andrew","Andy","Angel","Angela","Angelica","Angelina","Angeline","Angelita","Angelo","Angie","Angus","Anibal","Anika","Anissa","Anita","Aniya","Aniyah","Anjali","Anna","Annabel","Annabell","Annabelle","Annalise","Annamae","Annamarie","Anne","Annetta","Annette","Annie","Ansel","Ansley","Anthony","Antoinette","Antone","Antonetta","Antonette","Antonia","Antonietta","Antonina","Antonio","Antwan","Antwon","Anya","April","Ara","Araceli","Aracely","Arch","Archibald","Ardella","Arden","Ardith","Arely","Ari","Ariane","Arianna","Aric","Ariel","Arielle","Arjun","Arlene","Arlie","Arlo","Armand","Armando","Armani","Arnaldo","Arne","Arno","Arnold","Arnoldo","Arnulfo","Aron","Art","Arthur","Arturo","Arvel","Arvid","Arvilla","Aryanna","Asa","Asha","Ashlee","Ashleigh","Ashley","Ashly","Ashlynn","Ashton","Ashtyn","Asia","Assunta","Astrid","Athena","Aubree","Aubrey","Audie","Audra","Audreanne","Audrey","August","Augusta","Augustine","Augustus","Aurelia","Aurelie","Aurelio","Aurore","Austen","Austin","Austyn","Autumn","Ava","Avery","Avis","Axel","Ayana","Ayden","Ayla","Aylin","Baby","Bailee","Bailey","Barbara","Barney","Baron","Barrett","Barry","Bart","Bartholome","Barton","Baylee","Beatrice","Beau","Beaulah","Bell","Bella","Belle","Ben","Benedict","Benjamin","Bennett","Bennie","Benny","Benton","Berenice","Bernadette","Bernadine","Bernard","Bernardo","Berneice","Bernhard","Bernice","Bernie","Berniece","Bernita","Berry","Bert","Berta","Bertha","Bertram","Bertrand","Beryl","Bessie","Beth","Bethany","Bethel","Betsy","Bette","Bettie","Betty","Bettye","Beulah","Beverly","Bianka","Bill","Billie","Billy","Birdie","Blair","Blaise","Blake","Blanca","Blanche","Blaze","Bo","Bobbie","Bobby","Bonita","Bonnie","Boris","Boyd","Brad","Braden","Bradford","Bradley","Bradly","Brady","Braeden","Brain","Brandi","Brando","Brandon","Brandt","Brandy","Brandyn","Brannon","Branson","Brant","Braulio","Braxton","Brayan","Breana","Breanna","Breanne","Brenda","Brendan","Brenden","Brendon","Brenna","Brennan","Brennon","Brent","Bret","Brett","Bria","Brian","Briana","Brianne","Brice","Bridget","Bridgette","Bridie","Brielle","Brigitte","Brionna","Brisa","Britney","Brittany","Brock","Broderick","Brody","Brook","Brooke","Brooklyn","Brooks","Brown","Bruce","Bryana","Bryce","Brycen","Bryon","Buck","Bud","Buddy","Buford","Bulah","Burdette","Burley","Burnice","Buster","Cade","Caden","Caesar","Caitlyn","Cale","Caleb","Caleigh","Cali","Calista","Callie","Camden","Cameron","Camila","Camilla","Camille","Camren","Camron","Camryn","Camylle","Candace","Candelario","Candice","Candida","Candido","Cara","Carey","Carissa","Carlee","Carleton","Carley","Carli","Carlie","Carlo","Carlos","Carlotta","Carmel","Carmela","Carmella","Carmelo","Carmen","Carmine","Carol","Carolanne","Carole","Carolina","Caroline","Carolyn","Carolyne","Carrie","Carroll","Carson","Carter","Cary","Casandra","Casey","Casimer","Casimir","Casper","Cassandra","Cassandre","Cassidy","Cassie","Catalina","Caterina","Catharine","Catherine","Cathrine","Cathryn","Cathy","Cayla","Ceasar","Cecelia","Cecil","Cecile","Cecilia","Cedrick","Celestine","Celestino","Celia","Celine","Cesar","Chad","Chadd","Chadrick","Chaim","Chance","Chandler","Chanel","Chanelle","Charity","Charlene","Charles","Charley","Charlie","Charlotte","Chase","Chasity","Chauncey","Chaya","Chaz","Chelsea","Chelsey","Chelsie","Chesley","Chester","Chet","Cheyanne","Cheyenne","Chloe","Chris","Christ","Christa","Christelle","Christian","Christiana","Christina","Christine","Christop","Christophe","Christopher","Christy","Chyna","Ciara","Cicero","Cielo","Cierra","Cindy","Citlalli","Clair","Claire","Clara","Clarabelle","Clare","Clarissa","Clark","Claud","Claude","Claudia","Claudie","Claudine","Clay","Clemens","Clement","Clementina","Clementine","Clemmie","Cleo","Cleora","Cleta","Cletus","Cleve","Cleveland","Clifford","Clifton","Clint","Clinton","Clotilde","Clovis","Cloyd","Clyde","Coby","Cody","Colby","Cole","Coleman","Colin","Colleen","Collin","Colt","Colten","Colton","Columbus","Concepcion","Conner","Connie","Connor","Conor","Conrad","Constance","Constantin","Consuelo","Cooper","Cora","Coralie","Corbin","Cordelia","Cordell","Cordia","Cordie","Corene","Corine","Cornelius","Cornell","Corrine","Cortez","Cortney","Cory","Coty","Courtney","Coy","Craig","Crawford","Creola","Cristal","Cristian","Cristina","Cristobal","Cristopher","Cruz","Crystal","Crystel","Cullen","Curt","Curtis","Cydney","Cynthia","Cyril","Cyrus","Dagmar","Dahlia","Daija","Daisha","Daisy","Dakota","Dale","Dallas","Dallin","Dalton","Damaris","Dameon","Damian","Damien","Damion","Damon","Dan","Dana","Dandre","Dane","D'angelo","Dangelo","Danial","Daniela","Daniella","Danielle","Danika","Dannie","Danny","Dante","Danyka","Daphne","Daphnee","Daphney","Darby","Daren","Darian","Dariana","Darien","Dario","Darion","Darius","Darlene","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darrion","Darron","Darryl","Darwin","Daryl","Dashawn","Dasia","Dave","David","Davin","Davion","Davon","Davonte","Dawn","Dawson","Dax","Dayana","Dayna","Dayne","Dayton","Dean","Deangelo","Deanna","Deborah","Declan","Dedric","Dedrick","Dee","Deion","Deja","Dejah","Dejon","Dejuan","Delaney","Delbert","Delfina","Delia","Delilah","Dell","Della","Delmer","Delores","Delpha","Delphia","Delphine","Delta","Demarco","Demarcus","Demario","Demetris","Demetrius","Demond","Dena","Denis","Dennis","Deon","Deondre","Deontae","Deonte","Dereck","Derek","Derick","Deron","Derrick","Deshaun","Deshawn","Desiree","Desmond","Dessie","Destany","Destin","Destinee","Destiney","Destini","Destiny","Devan","Devante","Deven","Devin","Devon","Devonte","Devyn","Dewayne","Dewitt","Dexter","Diamond","Diana","Dianna","Diego","Dillan","Dillon","Dimitri","Dina","Dino","Dion","Dixie","Dock","Dolly","Dolores","Domenic","Domenica","Domenick","Domenico","Domingo","Dominic","Dominique","Don","Donald","Donato","Donavon","Donna","Donnell","Donnie","Donny","Dora","Dorcas","Dorian","Doris","Dorothea","Dorothy","Dorris","Dortha","Dorthy","Doug","Douglas","Dovie","Doyle","Drake","Drew","Duane","Dudley","Dulce","Duncan","Durward","Dustin","Dusty","Dwight","Dylan","Earl","Earlene","Earline","Earnest","Earnestine","Easter","Easton","Ebba","Ebony","Ed","Eda","Edd","Eddie","Eden","Edgar","Edgardo","Edison","Edmond","Edmund","Edna","Eduardo","Edward","Edwardo","Edwin","Edwina","Edyth","Edythe","Effie","Efrain","Efren","Eileen","Einar","Eino","Eladio","Elaina","Elbert","Elda","Eldon","Eldora","Eldred","Eldridge","Eleanora","Eleanore","Eleazar","Electa","Elena","Elenor","Elenora","Eleonore","Elfrieda","Eli","Elian","Eliane","Elias","Eliezer","Elijah","Elinor","Elinore","Elisa","Elisabeth","Elise","Eliseo","Elisha","Elissa","Eliza","Elizabeth","Ella","Ellen","Ellie","Elliot","Elliott","Ellis","Ellsworth","Elmer","Elmira","Elmo","Elmore","Elna","Elnora","Elody","Eloisa","Eloise","Elouise","Eloy","Elroy","Elsa","Else","Elsie","Elta","Elton","Elva","Elvera","Elvie","Elvis","Elwin","Elwyn","Elyse","Elyssa","Elza","Emanuel","Emelia","Emelie","Emely","Emerald","Emerson","Emery","Emie","Emil","Emile","Emilia","Emiliano","Emilie","Emilio","Emily","Emma","Emmalee","Emmanuel","Emmanuelle","Emmet","Emmett","Emmie","Emmitt","Emmy","Emory","Ena","Enid","Enoch","Enola","Enos","Enrico","Enrique","Ephraim","Era","Eriberto","Eric","Erica","Erich","Erick","Ericka","Erik","Erika","Erin","Erling","Erna","Ernest","Ernestina","Ernestine","Ernesto","Ernie","Ervin","Erwin","Eryn","Esmeralda","Esperanza","Esta","Esteban","Estefania","Estel","Estell","Estella","Estelle","Estevan","Esther","Estrella","Etha","Ethan","Ethel","Ethelyn","Ethyl","Ettie","Eudora","Eugene","Eugenia","Eula","Eulah","Eulalia","Euna","Eunice","Eusebio","Eva","Evalyn","Evan","Evangeline","Evans","Eve","Eveline","Evelyn","Everardo","Everett","Everette","Evert","Evie","Ewald","Ewell","Ezekiel","Ezequiel","Ezra","Fabian","Fabiola","Fae","Fannie","Fanny","Fatima","Faustino","Fausto","Favian","Fay","Faye","Federico","Felicia","Felicita","Felicity","Felipa","Felipe","Felix","Felton","Fermin","Fern","Fernando","Ferne","Fidel","Filiberto","Filomena","Finn","Fiona","Flavie","Flavio","Fleta","Fletcher","Flo","Florence","Florencio","Florian","Florida","Florine","Flossie","Floy","Floyd","Ford","Forest","Forrest","Foster","Frances","Francesca","Francesco","Francis","Francisca","Francisco","Franco","Frank","Frankie","Franz","Fred","Freda","Freddie","Freddy","Frederic","Frederick","Frederik","Frederique","Fredrick","Fredy","Freeda","Freeman","Freida","Frida","Frieda","Friedrich","Fritz","Furman","Gabe","Gabriel","Gabriella","Gabrielle","Gaetano","Gage","Gail","Gardner","Garett","Garfield","Garland","Garnet","Garnett","Garret","Garrett","Garrick","Garrison","Garry","Garth","Gaston","Gavin","Gay","Gayle","Gaylord","Gene","General","Genesis","Genevieve","Gennaro","Genoveva","Geo","Geoffrey","George","Georgette","Georgiana","Georgianna","Geovanni","Geovanny","Geovany","Gerald","Geraldine","Gerard","Gerardo","Gerda","Gerhard","Germaine","German","Gerry","Gerson","Gertrude","Gia","Gianni","Gideon","Gilbert","Gilberto","Gilda","Giles","Gillian","Gina","Gino","Giovani","Giovanna","Giovanni","Giovanny","Gisselle","Giuseppe","Gladyce","Gladys","Glen","Glenda","Glenna","Glennie","Gloria","Godfrey","Golda","Golden","Gonzalo","Gordon","Grace","Gracie","Graciela","Grady","Graham","Grant","Granville","Grayce","Grayson","Green","Greg","Gregg","Gregoria","Gregorio","Gregory","Greta","Gretchen","Greyson","Griffin","Grover","Guadalupe","Gudrun","Guido","Guillermo","Guiseppe","Gunnar","Gunner","Gus","Gussie","Gust","Gustave","Guy","Gwen","Gwendolyn","Hadley","Hailee","Hailey","Hailie","Hal","Haleigh","Haley","Halie","Halle","Hallie","Hank","Hanna","Hannah","Hans","Hardy","Harley","Harmon","Harmony","Harold","Harrison","Harry","Harvey","Haskell","Hassan","Hassie","Hattie","Haven","Hayden","Haylee","Hayley","Haylie","Hazel","Hazle","Heath","Heather","Heaven","Heber","Hector","Heidi","Helen","Helena","Helene","Helga","Hellen","Helmer","Heloise","Henderson","Henri","Henriette","Henry","Herbert","Herman","Hermann","Hermina","Herminia","Herminio","Hershel","Herta","Hertha","Hester","Hettie","Hilario","Hilbert","Hilda","Hildegard","Hillard","Hillary","Hilma","Hilton","Hipolito","Hiram","Hobart","Holden","Hollie","Hollis","Holly","Hope","Horace","Horacio","Hortense","Hosea","Houston","Howard","Howell","Hoyt","Hubert","Hudson","Hugh","Hulda","Humberto","Hunter","Hyman","Ian","Ibrahim","Icie","Ida","Idell","Idella","Ignacio","Ignatius","Ike","Ila","Ilene","Iliana","Ima","Imani","Imelda","Immanuel","Imogene","Ines","Irma","Irving","Irwin","Isaac","Isabel","Isabell","Isabella","Isabelle","Isac","Isadore","Isai","Isaiah","Isaias","Isidro","Ismael","Isobel","Isom","Israel","Issac","Itzel","Iva","Ivah","Ivory","Ivy","Izabella","Izaiah","Jabari","Jace","Jacey","Jacinthe","Jacinto","Jack","Jackeline","Jackie","Jacklyn","Jackson","Jacky","Jaclyn","Jacquelyn","Jacques","Jacynthe","Jada","Jade","Jaden","Jadon","Jadyn","Jaeden","Jaida","Jaiden","Jailyn","Jaime","Jairo","Jakayla","Jake","Jakob","Jaleel","Jalen","Jalon","Jalyn","Jamaal","Jamal","Jamar","Jamarcus","Jamel","Jameson","Jamey","Jamie","Jamil","Jamir","Jamison","Jammie","Jan","Jana","Janae","Jane","Janelle","Janessa","Janet","Janice","Janick","Janie","Janis","Janiya","Jannie","Jany","Jaquan","Jaquelin","Jaqueline","Jared","Jaren","Jarod","Jaron","Jarred","Jarrell","Jarret","Jarrett","Jarrod","Jarvis","Jasen","Jasmin","Jason","Jasper","Jaunita","Javier","Javon","Javonte","Jay","Jayce","Jaycee","Jayda","Jayde","Jayden","Jaydon","Jaylan","Jaylen","Jaylin","Jaylon","Jayme","Jayne","Jayson","Jazlyn","Jazmin","Jazmyn","Jazmyne","Jean","Jeanette","Jeanie","Jeanne","Jed","Jedediah","Jedidiah","Jeff","Jefferey","Jeffery","Jeffrey","Jeffry","Jena","Jenifer","Jennie","Jennifer","Jennings","Jennyfer","Jensen","Jerad","Jerald","Jeramie","Jeramy","Jerel","Jeremie","Jeremy","Jermain","Jermaine","Jermey","Jerod","Jerome","Jeromy","Jerrell","Jerrod","Jerrold","Jerry","Jess","Jesse","Jessica","Jessie","Jessika","Jessy","Jessyca","Jesus","Jett","Jettie","Jevon","Jewel","Jewell","Jillian","Jimmie","Jimmy","Jo","Joan","Joana","Joanie","Joanne","Joannie","Joanny","Joany","Joaquin","Jocelyn","Jodie","Jody","Joe","Joel","Joelle","Joesph","Joey","Johan","Johann","Johanna","Johathan","John","Johnathan","Johnathon","Johnnie","Johnny","Johnpaul","Johnson","Jolie","Jon","Jonas","Jonatan","Jonathan","Jonathon","Jordan","Jordane","Jordi","Jordon","Jordy","Jordyn","Jorge","Jose","Josefa","Josefina","Joseph","Josephine","Josh","Joshua","Joshuah","Josiah","Josiane","Josianne","Josie","Josue","Jovan","Jovani","Jovanny","Jovany","Joy","Joyce","Juana","Juanita","Judah","Judd","Jude","Judge","Judson","Judy","Jules","Julia","Julian","Juliana","Julianne","Julie","Julien","Juliet","Julio","Julius","June","Junior","Junius","Justen","Justice","Justina","Justine","Juston","Justus","Justyn","Juvenal","Juwan","Kacey","Kaci","Kacie","Kade","Kaden","Kadin","Kaela","Kaelyn","Kaia","Kailee","Kailey","Kailyn","Kaitlin","Kaitlyn","Kale","Kaleb","Kaleigh","Kaley","Kali","Kallie","Kameron","Kamille","Kamren","Kamron","Kamryn","Kane","Kara","Kareem","Karelle","Karen","Kari","Kariane","Karianne","Karina","Karine","Karl","Karlee","Karley","Karli","Karlie","Karolann","Karson","Kasandra","Kasey","Kassandra","Katarina","Katelin","Katelyn","Katelynn","Katharina","Katherine","Katheryn","Kathleen","Kathlyn","Kathryn","Kathryne","Katlyn","Katlynn","Katrina","Katrine","Kattie","Kavon","Kay","Kaya","Kaycee","Kayden","Kayla","Kaylah","Kaylee","Kayleigh","Kayley","Kayli","Kaylie","Kaylin","Keagan","Keanu","Keara","Keaton","Keegan","Keeley","Keely","Keenan","Keira","Keith","Kellen","Kelley","Kelli","Kellie","Kelly","Kelsi","Kelsie","Kelton","Kelvin","Ken","Kendall","Kendra","Kendrick","Kenna","Kennedi","Kennedy","Kenneth","Kennith","Kenny","Kenton","Kenya","Kenyatta","Kenyon","Keon","Keshaun","Keshawn","Keven","Kevin","Kevon","Keyon","Keyshawn","Khalid","Khalil","Kian","Kiana","Kianna","Kiara","Kiarra","Kiel","Kiera","Kieran","Kiley","Kim","Kimberly","King","Kip","Kira","Kirk","Kirsten","Kirstin","Kitty","Kobe","Koby","Kody","Kolby","Kole","Korbin","Korey","Kory","Kraig","Kris","Krista","Kristian","Kristin","Kristina","Kristofer","Kristoffer","Kristopher","Kristy","Krystal","Krystel","Krystina","Kurt","Kurtis","Kyla","Kyle","Kylee","Kyleigh","Kyler","Kylie","Kyra","Lacey","Lacy","Ladarius","Lafayette","Laila","Laisha","Lamar","Lambert","Lamont","Lance","Landen","Lane","Laney","Larissa","Laron","Larry","Larue","Laura","Laurel","Lauren","Laurence","Lauretta","Lauriane","Laurianne","Laurie","Laurine","Laury","Lauryn","Lavada","Lavern","Laverna","Laverne","Lavina","Lavinia","Lavon","Lavonne","Lawrence","Lawson","Layla","Layne","Lazaro","Lea","Leann","Leanna","Leanne","Leatha","Leda","Lee","Leif","Leila","Leilani","Lela","Lelah","Leland","Lelia","Lempi","Lemuel","Lenna","Lennie","Lenny","Lenora","Lenore","Leo","Leola","Leon","Leonard","Leonardo","Leone","Leonel","Leonie","Leonor","Leonora","Leopold","Leopoldo","Leora","Lera","Lesley","Leslie","Lesly","Lessie","Lester","Leta","Letha","Letitia","Levi","Lew","Lewis","Lexi","Lexie","Lexus","Lia","Liam","Liana","Libbie","Libby","Lila","Lilian","Liliana","Liliane","Lilla","Lillian","Lilliana","Lillie","Lilly","Lily","Lilyan","Lina","Lincoln","Linda","Lindsay","Lindsey","Linnea","Linnie","Linwood","Lionel","Lisa","Lisandro","Lisette","Litzy","Liza","Lizeth","Lizzie","Llewellyn","Lloyd","Logan","Lois","Lola","Lolita","Loma","Lon","London","Lonie","Lonnie","Lonny","Lonzo","Lora","Loraine","Loren","Lorena","Lorenz","Lorenza","Lorenzo","Lori","Lorine","Lorna","Lottie","Lou","Louie","Louisa","Lourdes","Louvenia","Lowell","Loy","Loyal","Loyce","Lucas","Luciano","Lucie","Lucienne","Lucile","Lucinda","Lucio","Lucious","Lucius","Lucy","Ludie","Ludwig","Lue","Luella","Luigi","Luis","Luisa","Lukas","Lula","Lulu","Luna","Lupe","Lura","Lurline","Luther","Luz","Lyda","Lydia","Lyla","Lynn","Lyric","Lysanne","Mabel","Mabelle","Mable","Mac","Macey","Maci","Macie","Mack","Mackenzie","Macy","Madaline","Madalyn","Maddison","Madeline","Madelyn","Madelynn","Madge","Madie","Madilyn","Madisen","Madison","Madisyn","Madonna","Madyson","Mae","Maegan","Maeve","Mafalda","Magali","Magdalen","Magdalena","Maggie","Magnolia","Magnus","Maia","Maida","Maiya","Major","Makayla","Makenna","Makenzie","Malachi","Malcolm","Malika","Malinda","Mallie","Mallory","Malvina","Mandy","Manley","Manuel","Manuela","Mara","Marc","Marcel","Marcelina","Marcelino","Marcella","Marcelle","Marcellus","Marcelo","Marcia","Marco","Marcos","Marcus","Margaret","Margarete","Margarett","Margaretta","Margarette","Margarita","Marge","Margie","Margot","Margret","Marguerite","Maria","Mariah","Mariam","Marian","Mariana","Mariane","Marianna","Marianne","Mariano","Maribel","Marie","Mariela","Marielle","Marietta","Marilie","Marilou","Marilyne","Marina","Mario","Marion","Marisa","Marisol","Maritza","Marjolaine","Marjorie","Marjory","Mark","Markus","Marlee","Marlen","Marlene","Marley","Marlin","Marlon","Marques","Marquis","Marquise","Marshall","Marta","Martin","Martina","Martine","Marty","Marvin","Mary","Maryam","Maryjane","Maryse","Mason","Mateo","Mathew","Mathias","Mathilde","Matilda","Matilde","Matt","Matteo","Mattie","Maud","Maude","Maudie","Maureen","Maurice","Mauricio","Maurine","Maverick","Mavis","Max","Maxie","Maxime","Maximilian","Maximillia","Maximillian","Maximo","Maximus","Maxine","Maxwell","May","Maya","Maybell","Maybelle","Maye","Maymie","Maynard","Mayra","Mazie","Mckayla","Mckenna","Mckenzie","Meagan","Meaghan","Meda","Megane","Meggie","Meghan","Mekhi","Melany","Melba","Melisa","Melissa","Mellie","Melody","Melvin","Melvina","Melyna","Melyssa","Mercedes","Meredith","Merl","Merle","Merlin","Merritt","Mertie","Mervin","Meta","Mia","Micaela","Micah","Michael","Michaela","Michale","Micheal","Michel","Michele","Michelle","Miguel","Mikayla","Mike","Mikel","Milan","Miles","Milford","Miller","Millie","Milo","Milton","Mina","Minerva","Minnie","Miracle","Mireille","Mireya","Misael","Missouri","Misty","Mitchel","Mitchell","Mittie","Modesta","Modesto","Mohamed","Mohammad","Mohammed","Moises","Mollie","Molly","Mona","Monica","Monique","Monroe","Monserrat","Monserrate","Montana","Monte","Monty","Morgan","Moriah","Morris","Mortimer","Morton","Mose","Moses","Moshe","Mossie","Mozell","Mozelle","Muhammad","Muriel","Murl","Murphy","Murray","Mustafa","Mya","Myah","Mylene","Myles","Myra","Myriam","Myrl","Myrna","Myron","Myrtice","Myrtie","Myrtis","Myrtle","Nadia","Nakia","Name","Nannie","Naomi","Naomie","Napoleon","Narciso","Nash","Nasir","Nat","Natalia","Natalie","Natasha","Nathan","Nathanael","Nathanial","Nathaniel","Nathen","Nayeli","Neal","Ned","Nedra","Neha","Neil","Nelda","Nella","Nelle","Nellie","Nels","Nelson","Neoma","Nestor","Nettie","Neva","Newell","Newton","Nia","Nicholas","Nicholaus","Nichole","Nick","Nicklaus","Nickolas","Nico","Nicola","Nicolas","Nicole","Nicolette","Nigel","Nikita","Nikki","Nikko","Niko","Nikolas","Nils","Nina","Noah","Noble","Noe","Noel","Noelia","Noemi","Noemie","Noemy","Nola","Nolan","Nona","Nora","Norbert","Norberto","Norene","Norma","Norris","Norval","Norwood","Nova","Novella","Nya","Nyah","Nyasia","Obie","Oceane","Ocie","Octavia","Oda","Odell","Odessa","Odie","Ofelia","Okey","Ola","Olaf","Ole","Olen","Oleta","Olga","Olin","Oliver","Ollie","Oma","Omari","Omer","Ona","Onie","Opal","Ophelia","Ora","Oral","Oran","Oren","Orie","Orin","Orion","Orland","Orlando","Orlo","Orpha","Orrin","Orval","Orville","Osbaldo","Osborne","Oscar","Osvaldo","Oswald","Oswaldo","Otha","Otho","Otilia","Otis","Ottilie","Ottis","Otto","Ova","Owen","Ozella","Pablo","Paige","Palma","Pamela","Pansy","Paolo","Paris","Parker","Pascale","Pasquale","Pat","Patience","Patricia","Patrick","Patsy","Pattie","Paul","Paula","Pauline","Paxton","Payton","Pearl","Pearlie","Pearline","Pedro","Peggie","Penelope","Percival","Percy","Perry","Pete","Peter","Petra","Peyton","Philip","Phoebe","Phyllis","Pierce","Pierre","Pietro","Pink","Pinkie","Piper","Polly","Porter","Precious","Presley","Preston","Price","Prince","Princess","Priscilla","Providenci","Prudence","Queen","Queenie","Quentin","Quincy","Quinn","Quinten","Quinton","Rachael","Rachel","Rachelle","Rae","Raegan","Rafael","Rafaela","Raheem","Rahsaan","Rahul","Raina","Raleigh","Ralph","Ramiro","Ramon","Ramona","Randal","Randall","Randi","Randy","Ransom","Raoul","Raphael","Raphaelle","Raquel","Rashad","Rashawn","Rasheed","Raul","Raven","Ray","Raymond","Raymundo","Reagan","Reanna","Reba","Rebeca","Rebecca","Rebeka","Rebekah","Reece","Reed","Reese","Regan","Reggie","Reginald","Reid","Reilly","Reina","Reinhold","Remington","Rene","Renee","Ressie","Reta","Retha","Retta","Reuben","Reva","Rex","Rey","Reyes","Reymundo","Reyna","Reynold","Rhea","Rhett","Rhianna","Rhiannon","Rhoda","Ricardo","Richard","Richie","Richmond","Rick","Rickey","Rickie","Ricky","Rico","Rigoberto","Riley","Rita","River","Robb","Robbie","Robert","Roberta","Roberto","Robin","Robyn","Rocio","Rocky","Rod","Roderick","Rodger","Rodolfo","Rodrick","Rodrigo","Roel","Rogelio","Roger","Rogers","Rolando","Rollin","Roma","Romaine","Roman","Ron","Ronaldo","Ronny","Roosevelt","Rory","Rosa","Rosalee","Rosalia","Rosalind","Rosalinda","Rosalyn","Rosamond","Rosanna","Rosario","Roscoe","Rose","Rosella","Roselyn","Rosemarie","Rosemary","Rosendo","Rosetta","Rosie","Rosina","Roslyn","Ross","Rossie","Rowan","Rowena","Rowland","Roxane","Roxanne","Roy","Royal","Royce","Rozella","Ruben","Rubie","Ruby","Rubye","Rudolph","Rudy","Rupert","Russ","Russel","Russell","Rusty","Ruth","Ruthe","Ruthie","Ryan","Ryann","Ryder","Rylan","Rylee","Ryleigh","Ryley","Sabina","Sabrina","Sabryna","Sadie","Sadye","Sage","Saige","Sallie","Sally","Salma","Salvador","Salvatore","Sam","Samanta","Samantha","Samara","Samir","Sammie","Sammy","Samson","Sandra","Sandrine","Sandy","Sanford","Santa","Santiago","Santina","Santino","Santos","Sarah","Sarai","Sarina","Sasha","Saul","Savanah","Savanna","Savannah","Savion","Scarlett","Schuyler","Scot","Scottie","Scotty","Seamus","Sean","Sebastian","Sedrick","Selena","Selina","Selmer","Serena","Serenity","Seth","Shad","Shaina","Shakira","Shana","Shane","Shanel","Shanelle","Shania","Shanie","Shaniya","Shanna","Shannon","Shanny","Shanon","Shany","Sharon","Shaun","Shawn","Shawna","Shaylee","Shayna","Shayne","Shea","Sheila","Sheldon","Shemar","Sheridan","Sherman","Sherwood","Shirley","Shyann","Shyanne","Sibyl","Sid","Sidney","Sienna","Sierra","Sigmund","Sigrid","Sigurd","Silas","Sim","Simeon","Simone","Sincere","Sister","Skye","Skyla","Skylar","Sofia","Soledad","Solon","Sonia","Sonny","Sonya","Sophia","Sophie","Spencer","Stacey","Stacy","Stan","Stanford","Stanley","Stanton","Stefan","Stefanie","Stella","Stephan","Stephania","Stephanie","Stephany","Stephen","Stephon","Sterling","Steve","Stevie","Stewart","Stone","Stuart","Summer","Sunny","Susan","Susana","Susanna","Susie","Suzanne","Sven","Syble","Sydnee","Sydney","Sydni","Sydnie","Sylvan","Sylvester","Sylvia","Tabitha","Tad","Talia","Talon","Tamara","Tamia","Tania","Tanner","Tanya","Tara","Taryn","Tate","Tatum","Tatyana","Taurean","Tavares","Taya","Taylor","Teagan","Ted","Telly","Terence","Teresa","Terrance","Terrell","Terrence","Terrill","Terry","Tess","Tessie","Tevin","Thad","Thaddeus","Thalia","Thea","Thelma","Theo","Theodora","Theodore","Theresa","Therese","Theresia","Theron","Thomas","Thora","Thurman","Tia","Tiana","Tianna","Tiara","Tierra","Tiffany","Tillman","Timmothy","Timmy","Timothy","Tina","Tito","Titus","Tobin","Toby","Tod","Tom","Tomas","Tomasa","Tommie","Toney","Toni","Tony","Torey","Torrance","Torrey","Toy","Trace","Tracey","Tracy","Travis","Travon","Tre","Tremaine","Tremayne","Trent","Trenton","Tressa","Tressie","Treva","Trever","Trevion","Trevor","Trey","Trinity","Trisha","Tristian","Tristin","Triston","Troy","Trudie","Trycia","Trystan","Turner","Twila","Tyler","Tyra","Tyree","Tyreek","Tyrel","Tyrell","Tyrese","Tyrique","Tyshawn","Tyson","Ubaldo","Ulices","Ulises","Una","Unique","Urban","Uriah","Uriel","Ursula","Vada","Valentin","Valentina","Valentine","Valerie","Vallie","Van","Vance","Vanessa","Vaughn","Veda","Velda","Vella","Velma","Velva","Vena","Verda","Verdie","Vergie","Verla","Verlie","Vern","Verna","Verner","Vernice","Vernie","Vernon","Verona","Veronica","Vesta","Vicenta","Vicente","Vickie","Vicky","Victor","Victoria","Vida","Vidal","Vilma","Vince","Vincent","Vincenza","Vincenzo","Vinnie","Viola","Violet","Violette","Virgie","Virgil","Virginia","Virginie","Vita","Vito","Viva","Vivian","Viviane","Vivianne","Vivien","Vivienne","Vladimir","Wade","Waino","Waldo","Walker","Wallace","Walter","Walton","Wanda","Ward","Warren","Watson","Wava","Waylon","Wayne","Webster","Weldon","Wellington","Wendell","Wendy","Werner","Westley","Weston","Whitney","Wilber","Wilbert","Wilburn","Wiley","Wilford","Wilfred","Wilfredo","Wilfrid","Wilhelm","Wilhelmine","Will","Willa","Willard","William","Willie","Willis","Willow","Willy","Wilma","Wilmer","Wilson","Wilton","Winfield","Winifred","Winnifred","Winona","Winston","Woodrow","Wyatt","Wyman","Xander","Xavier","Xzavier","Yadira","Yasmeen","Yasmin","Yasmine","Yazmin","Yesenia","Yessenia","Yolanda","Yoshiko","Yvette","Yvonne","Zachariah","Zachary","Zachery","Zack","Zackary","Zackery","Zakary","Zander","Zane","Zaria","Zechariah","Zelda","Zella","Zelma","Zena","Zetta","Zion","Zita","Zoe","Zoey","Zoie","Zoila","Zola","Zora","Zul"];
-Faker.Helpers.createCard = function (){
-
- return {
- "name":Faker.Name.findName(),
- "username":Faker.Internet.userName(),
- "email":Faker.Internet.email(),
- "address":{
- "streetA":Faker.Address.streetName(),
- "streetB":Faker.Address.streetAddress(),
- "streetC":Faker.Address.streetAddress(true),
- "streetD":Faker.Address.secondaryAddress(),
- "city":Faker.Address.city(),
- "ukCounty":Faker.Address.ukCounty(),
- "ukCountry":Faker.Address.ukCountry(),
- "zipcode":Faker.Address.zipCode()
- },
- "phone":Faker.PhoneNumber.phoneNumber(),
- "website":Faker.Internet.domainName(),
- "company":{
- "name":Faker.Company.companyName(),
- "catchPhrase":Faker.Company.catchPhrase(),
- "bs":Faker.Company.bs(),
- },
- "posts":[
- {
- "words":Faker.Lorem.words(),
- "sentence":Faker.Lorem.sentence(),
- "sentences":Faker.Lorem.sentences(),
- "paragraph":Faker.Lorem.paragraph()
- },
- {
- "words":Faker.Lorem.words(),
- "sentence":Faker.Lorem.sentence(),
- "sentences":Faker.Lorem.sentences(),
- "paragraph":Faker.Lorem.paragraph()
- },
- {
- "words":Faker.Lorem.words(),
- "sentence":Faker.Lorem.sentence(),
- "sentences":Faker.Lorem.sentences(),
- "paragraph":Faker.Lorem.paragraph()
- }
- ]
- };
-};
+Faker.definitions.last_name = ["Abbott","Abernathy","Abshire","Adams","Altenwerth","Anderson","Ankunding","Armstrong","Auer","Aufderhar","Bahringer","Bailey","Balistreri","Barrows","Bartell","Bartoletti","Barton","Bashirian","Batz","Bauch","Baumbach","Bayer","Beahan","Beatty","Bechtelar","Becker","Bednar","Beer","Beier","Berge","Bergnaum","Bergstrom","Bernhard","Bernier","Bins","Blanda","Blick","Block","Bode","Boehm","Bogan","Bogisich","Borer","Bosco","Botsford","Boyer","Boyle","Bradtke","Brakus","Braun","Breitenberg","Brekke","Brown","Bruen","Buckridge","Carroll","Carter","Cartwright","Casper","Cassin","Champlin","Christiansen","Cole","Collier","Collins","Conn","Connelly","Conroy","Considine","Corkery","Cormier","Corwin","Cremin","Crist","Crona","Cronin","Crooks","Cruickshank","Cummerata","Cummings","Dach","D'Amore","Daniel","Dare","Daugherty","Davis","Deckow","Denesik","Dibbert","Dickens","Dicki","Dickinson","Dietrich","Donnelly","Dooley","Douglas","Doyle","DuBuque","Durgan","Ebert","Effertz","Eichmann","Emard","Emmerich","Erdman","Ernser","Fadel","Fahey","Farrell","Fay","Feeney","Feest","Feil","Ferry","Fisher","Flatley","Frami","Franecki","Friesen","Fritsch","Funk","Gaylord","Gerhold","Gerlach","Gibson","Gislason","Gleason","Gleichner","Glover","Goldner","Goodwin","Gorczany","Gottlieb","Goyette","Grady","Graham","Grant","Green","Greenfelder","Greenholt","Grimes","Gulgowski","Gusikowski","Gutkowski","Guªann","Haag","Hackett","Hagenes","Hahn","Haley","Halvorson","Hamill","Hammes","Hand","Hane","Hansen","Harber","Harris","Harªann","Harvey","Hauck","Hayes","Heaney","Heathcote","Hegmann","Heidenreich","Heller","Herman","Hermann","Hermiston","Herzog","Hessel","Hettinger","Hickle","Hilll","Hills","Hilpert","Hintz","Hirthe","Hodkiewicz","Hoeger","Homenick","Hoppe","Howe","Howell","Hudson","Huel","Huels","Hyatt","Jacobi","Jacobs","Jacobson","Jakubowski","Jaskolski","Jast","Jenkins","Jerde","Jewess","Johns","Johnson","Johnston","Jones","Kassulke","Kautzer","Keebler","Keeling","Kemmer","Kerluke","Kertzmann","Kessler","Kiehn","Kihn","Kilback","King","Kirlin","Klein","Kling","Klocko","Koch","Koelpin","Koepp","Kohler","Konopelski","Koss","Kovacek","Kozey","Krajcik","Kreiger","Kris","Kshlerin","Kub","Kuhic","Kuhlman","Kuhn","Kulas","Kunde","Kunze","Kuphal","Kutch","Kuvalis","Labadie","Lakin","Lang","Langosh","Langworth","Larkin","Larson","Leannon","Lebsack","Ledner","Leffler","Legros","Lehner","Lemke","Lesch","Leuschke","Lind","Lindgren","Littel","Little","Lockman","Lowe","Lubowitz","Lueilwitz","Luettgen","Lynch","Macejkovic","Maggio","Mann","Mante","Marks","Marquardt","Marvin","Mayer","Mayert","McClure","McCullough","McDermott","McGlynn","McKenzie","McLaughlin","Medhurst","Mertz","Metz","Miller","Mills","Mitchell","Moen","Mohr","Monahan","Moore","Morar","Morissette","Mosciski","Mraz","Mueller","Muller","Murazik","Murphy","Murray","Nader","Nicolas","Nienow","Nikolaus","Nitzsche","Nolan","Oberbrunner","O'Connell","O'Conner","O'Hara","O'Keefe","O'Kon","Okuneva","Olson","Ondricka","O'Reilly","Orn","Ortiz","Osinski","Pacocha","Padberg","Pagac","Parisian","Parker","Paucek","Pfannerstill","Pfeffer","Pollich","Pouros","Powlowski","Predovic","Price","Prohaska","Prosacco","Purdy","Quigley","Quitzon","Rath","Ratke","Rau","Raynor","Reichel","Reichert","Reilly","Reinger","Rempel","Renner","Reynolds","Rice","Rippin","Ritchie","Robel","Roberts","Rodriguez","Rogahn","Rohan","Rolfson","Romaguera","Roob","Rosenbaum","Rowe","Ruecker","Runolfsdottir","Runolfsson","Runte","Russel","Rutherford","Ryan","Sanford","Satterfield","Sauer","Sawayn","Schaden","Schaefer","Schamberger","Schiller","Schimmel","Schinner","Schmeler","Schmidt","Schmitt","Schneider","Schoen","Schowalter","Schroeder","Schulist","Schultz","Schumm","Schuppe","Schuster","Senger","Shanahan","Shields","Simonis","Sipes","Skiles","Smith","Smitham","Spencer","Spinka","Sporer","Stamm","Stanton","Stark","Stehr","Steuber","Stiedemann","Stokes","Stoltenberg","Stracke","Streich","Stroman","Strosin","Swaniawski","Swift","Terry","Thiel","Thompson","Tillman","Torp","Torphy","Towne","Toy","Trantow","Tremblay","Treutel","Tromp","Turcotte","Turner","Ullrich","Upton","Vandervort","Veum","Volkman","Von","VonRueden","Waelchi","Walker","Walsh","Walter","Ward","Waters","Watsica","Weber","Wehner","Weimann","Weissnat","Welch","West","White","Wiegand","Wilderman","Wilkinson","Will","Williamson","Willms","Windler","Wintheiser","Wisoky","Wisozk","Witting","Wiza","Wolf","Wolff","Wuckert","Wunsch","Wyman","Yost","Yundt","Zboncak","Zemlak","Ziemann","Zieme","Zulauf"];
-Faker.Helpers.userCard = function (){
-
- return {
- "name":Faker.Name.findName(),
- "username":Faker.Internet.userName(),
- "email":Faker.Internet.email(),
- "address":{
- "street":Faker.Address.streetName(true),
- "suite":Faker.Address.secondaryAddress(),
- "city":Faker.Address.city(),
- "zipcode":Faker.Address.zipCode()
- },
- "phone":Faker.PhoneNumber.phoneNumber(),
- "website":Faker.Internet.domainName(),
- "company":{
- "name":Faker.Company.companyName(),
- "catchPhrase":Faker.Company.catchPhrase(),
- "bs":Faker.Company.bs(),
- },
- };
-};
+Faker.definitions.name_prefix = ["Mr.","Mrs.","Ms.","Miss","Dr."];
-Faker.definitions = {};
-Faker.definitions.first_name = function (){return ["Aaliyah","Aaron","Abagail","Abbey","Abbie","Abbigail","Abby","Abdiel","Abdul","Abdullah","Abe","Abel","Abelardo","Abigail","Abigale","Abigayle","Abner","Abraham","Ada","Adah","Adalberto","Adaline","Adam","Adan","Addie","Addison","Adela","Adelbert","Adele","Adelia","Adeline","Adell","Adella","Adelle","Aditya","Adolf","Adolfo","Adolph","Adolphus","Adonis","Adrain","Adrian","Adriana","Adrianna","Adriel","Adrien","Adrienne","Afton","Aglae","Agnes","Agustin","Agustina","Ahmad","Ahmed","Aida","Aidan","Aiden","Aileen","Aimee","Aisha","Aiyana","Akeem","Al","Alaina","Alan","Alana","Alanis","Alanna","Alayna","Alba","Albert","Alberta","Albertha","Alberto","Albin","Albina","Alda","Alden","Alec","Aleen","Alejandra","Alejandrin","Alek","Alena","Alene","Alessandra","Alessandro","Alessia","Aletha","Alex","Alexa","Alexander","Alexandra","Alexandre","Alexandrea","Alexandria","Alexandrine","Alexandro","Alexane","Alexanne","Alexie","Alexis","Alexys","Alexzander","Alf","Alfonso","Alfonzo","Alford","Alfred","Alfreda","Alfredo","Ali","Alia","Alice","Alicia","Alisa","Alisha","Alison","Alivia","Aliya","Aliyah","Aliza","Alize","Allan","Allen","Allene","Allie","Allison","Ally","Alphonso","Alta","Althea","Alva","Alvah","Alvena","Alvera","Alverta","Alvina","Alvis","Alyce","Alycia","Alysa","Alysha","Alyson","Alysson","Amalia","Amanda","Amani","Amara","Amari","Amaya","Amber","Ambrose","Amelia","Amelie","Amely","America","Americo","Amie","Amina","Amir","Amira","Amiya","Amos","Amparo","Amy","Amya","Ana","Anabel","Anabelle","Anahi","Anais","Anastacio","Anastasia","Anderson","Andre","Andreane","Andreanne","Andres","Andrew","Andy","Angel","Angela","Angelica","Angelina","Angeline","Angelita","Angelo","Angie","Angus","Anibal","Anika","Anissa","Anita","Aniya","Aniyah","Anjali","Anna","Annabel","Annabell","Annabelle","Annalise","Annamae","Annamarie","Anne","Annetta","Annette","Annie","Ansel","Ansley","Anthony","Antoinette","Antone","Antonetta","Antonette","Antonia","Antonietta","Antonina","Antonio","Antwan","Antwon","Anya","April","Ara","Araceli","Aracely","Arch","Archibald","Ardella","Arden","Ardith","Arely","Ari","Ariane","Arianna","Aric","Ariel","Arielle","Arjun","Arlene","Arlie","Arlo","Armand","Armando","Armani","Arnaldo","Arne","Arno","Arnold","Arnoldo","Arnulfo","Aron","Art","Arthur","Arturo","Arvel","Arvid","Arvilla","Aryanna","Asa","Asha","Ashlee","Ashleigh","Ashley","Ashly","Ashlynn","Ashton","Ashtyn","Asia","Assunta","Astrid","Athena","Aubree","Aubrey","Audie","Audra","Audreanne","Audrey","August","Augusta","Augustine","Augustus","Aurelia","Aurelie","Aurelio","Aurore","Austen","Austin","Austyn","Autumn","Ava","Avery","Avis","Axel","Ayana","Ayden","Ayla","Aylin","Baby","Bailee","Bailey","Barbara","Barney","Baron","Barrett","Barry","Bart","Bartholome","Barton","Baylee","Beatrice","Beau","Beaulah","Bell","Bella","Belle","Ben","Benedict","Benjamin","Bennett","Bennie","Benny","Benton","Berenice","Bernadette","Bernadine","Bernard","Bernardo","Berneice","Bernhard","Bernice","Bernie","Berniece","Bernita","Berry","Bert","Berta","Bertha","Bertram","Bertrand","Beryl","Bessie","Beth","Bethany","Bethel","Betsy","Bette","Bettie","Betty","Bettye","Beulah","Beverly","Bianka","Bill","Billie","Billy","Birdie","Blair","Blaise","Blake","Blanca","Blanche","Blaze","Bo","Bobbie","Bobby","Bonita","Bonnie","Boris","Boyd","Brad","Braden","Bradford","Bradley","Bradly","Brady","Braeden","Brain","Brandi","Brando","Brandon","Brandt","Brandy","Brandyn","Brannon","Branson","Brant","Braulio","Braxton","Brayan","Breana","Breanna","Breanne","Brenda","Brendan","Brenden","Brendon","Brenna","Brennan","Brennon","Brent","Bret","Brett","Bria","Brian","Briana","Brianne","Brice","Bridget","Bridgette","Bridie","Brielle","Brigitte","Brionna","Brisa","Britney","Brittany","Brock","Broderick","Brody","Brook","Brooke","Brooklyn","Brooks","Brown","Bruce","Bryana","Bryce","Brycen","Bryon","Buck","Bud","Buddy","Buford","Bulah","Burdette","Burley","Burnice","Buster","Cade","Caden","Caesar","Caitlyn","Cale","Caleb","Caleigh","Cali","Calista","Callie","Camden","Cameron","Camila","Camilla","Camille","Camren","Camron","Camryn","Camylle","Candace","Candelario","Candice","Candida","Candido","Cara","Carey","Carissa","Carlee","Carleton","Carley","Carli","Carlie","Carlo","Carlos","Carlotta","Carmel","Carmela","Carmella","Carmelo","Carmen","Carmine","Carol","Carolanne","Carole","Carolina","Caroline","Carolyn","Carolyne","Carrie","Carroll","Carson","Carter","Cary","Casandra","Casey","Casimer","Casimir","Casper","Cassandra","Cassandre","Cassidy","Cassie","Catalina","Caterina","Catharine","Catherine","Cathrine","Cathryn","Cathy","Cayla","Ceasar","Cecelia","Cecil","Cecile","Cecilia","Cedrick","Celestine","Celestino","Celia","Celine","Cesar","Chad","Chadd","Chadrick","Chaim","Chance","Chandler","Chanel","Chanelle","Charity","Charlene","Charles","Charley","Charlie","Charlotte","Chase","Chasity","Chauncey","Chaya","Chaz","Chelsea","Chelsey","Chelsie","Chesley","Chester","Chet","Cheyanne","Cheyenne","Chloe","Chris","Christ","Christa","Christelle","Christian","Christiana","Christina","Christine","Christop","Christophe","Christopher","Christy","Chyna","Ciara","Cicero","Cielo","Cierra","Cindy","Citlalli","Clair","Claire","Clara","Clarabelle","Clare","Clarissa","Clark","Claud","Claude","Claudia","Claudie","Claudine","Clay","Clemens","Clement","Clementina","Clementine","Clemmie","Cleo","Cleora","Cleta","Cletus","Cleve","Cleveland","Clifford","Clifton","Clint","Clinton","Clotilde","Clovis","Cloyd","Clyde","Coby","Cody","Colby","Cole","Coleman","Colin","Colleen","Collin","Colt","Colten","Colton","Columbus","Concepcion","Conner","Connie","Connor","Conor","Conrad","Constance","Constantin","Consuelo","Cooper","Cora","Coralie","Corbin","Cordelia","Cordell","Cordia","Cordie","Corene","Corine","Cornelius","Cornell","Corrine","Cortez","Cortney","Cory","Coty","Courtney","Coy","Craig","Crawford","Creola","Cristal","Cristian","Cristina","Cristobal","Cristopher","Cruz","Crystal","Crystel","Cullen","Curt","Curtis","Cydney","Cynthia","Cyril","Cyrus","Dagmar","Dahlia","Daija","Daisha","Daisy","Dakota","Dale","Dallas","Dallin","Dalton","Damaris","Dameon","Damian","Damien","Damion","Damon","Dan","Dana","Dandre","Dane","D'angelo","Dangelo","Danial","Daniela","Daniella","Danielle","Danika","Dannie","Danny","Dante","Danyka","Daphne","Daphnee","Daphney","Darby","Daren","Darian","Dariana","Darien","Dario","Darion","Darius","Darlene","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darrion","Darron","Darryl","Darwin","Daryl","Dashawn","Dasia","Dave","David","Davin","Davion","Davon","Davonte","Dawn","Dawson","Dax","Dayana","Dayna","Dayne","Dayton","Dean","Deangelo","Deanna","Deborah","Declan","Dedric","Dedrick","Dee","Deion","Deja","Dejah","Dejon","Dejuan","Delaney","Delbert","Delfina","Delia","Delilah","Dell","Della","Delmer","Delores","Delpha","Delphia","Delphine","Delta","Demarco","Demarcus","Demario","Demetris","Demetrius","Demond","Dena","Denis","Dennis","Deon","Deondre","Deontae","Deonte","Dereck","Derek","Derick","Deron","Derrick","Deshaun","Deshawn","Desiree","Desmond","Dessie","Destany","Destin","Destinee","Destiney","Destini","Destiny","Devan","Devante","Deven","Devin","Devon","Devonte","Devyn","Dewayne","Dewitt","Dexter","Diamond","Diana","Dianna","Diego","Dillan","Dillon","Dimitri","Dina","Dino","Dion","Dixie","Dock","Dolly","Dolores","Domenic","Domenica","Domenick","Domenico","Domingo","Dominic","Dominique","Don","Donald","Donato","Donavon","Donna","Donnell","Donnie","Donny","Dora","Dorcas","Dorian","Doris","Dorothea","Dorothy","Dorris","Dortha","Dorthy","Doug","Douglas","Dovie","Doyle","Drake","Drew","Duane","Dudley","Dulce","Duncan","Durward","Dustin","Dusty","Dwight","Dylan","Earl","Earlene","Earline","Earnest","Earnestine","Easter","Easton","Ebba","Ebony","Ed","Eda","Edd","Eddie","Eden","Edgar","Edgardo","Edison","Edmond","Edmund","Edna","Eduardo","Edward","Edwardo","Edwin","Edwina","Edyth","Edythe","Effie","Efrain","Efren","Eileen","Einar","Eino","Eladio","Elaina","Elbert","Elda","Eldon","Eldora","Eldred","Eldridge","Eleanora","Eleanore","Eleazar","Electa","Elena","Elenor","Elenora","Eleonore","Elfrieda","Eli","Elian","Eliane","Elias","Eliezer","Elijah","Elinor","Elinore","Elisa","Elisabeth","Elise","Eliseo","Elisha","Elissa","Eliza","Elizabeth","Ella","Ellen","Ellie","Elliot","Elliott","Ellis","Ellsworth","Elmer","Elmira","Elmo","Elmore","Elna","Elnora","Elody","Eloisa","Eloise","Elouise","Eloy","Elroy","Elsa","Else","Elsie","Elta","Elton","Elva","Elvera","Elvie","Elvis","Elwin","Elwyn","Elyse","Elyssa","Elza","Emanuel","Emelia","Emelie","Emely","Emerald","Emerson","Emery","Emie","Emil","Emile","Emilia","Emiliano","Emilie","Emilio","Emily","Emma","Emmalee","Emmanuel","Emmanuelle","Emmet","Emmett","Emmie","Emmitt","Emmy","Emory","Ena","Enid","Enoch","Enola","Enos","Enrico","Enrique","Ephraim","Era","Eriberto","Eric","Erica","Erich","Erick","Ericka","Erik","Erika","Erin","Erling","Erna","Ernest","Ernestina","Ernestine","Ernesto","Ernie","Ervin","Erwin","Eryn","Esmeralda","Esperanza","Esta","Esteban","Estefania","Estel","Estell","Estella","Estelle","Estevan","Esther","Estrella","Etha","Ethan","Ethel","Ethelyn","Ethyl","Ettie","Eudora","Eugene","Eugenia","Eula","Eulah","Eulalia","Euna","Eunice","Eusebio","Eva","Evalyn","Evan","Evangeline","Evans","Eve","Eveline","Evelyn","Everardo","Everett","Everette","Evert","Evie","Ewald","Ewell","Ezekiel","Ezequiel","Ezra","Fabian","Fabiola","Fae","Fannie","Fanny","Fatima","Faustino","Fausto","Favian","Fay","Faye","Federico","Felicia","Felicita","Felicity","Felipa","Felipe","Felix","Felton","Fermin","Fern","Fernando","Ferne","Fidel","Filiberto","Filomena","Finn","Fiona","Flavie","Flavio","Fleta","Fletcher","Flo","Florence","Florencio","Florian","Florida","Florine","Flossie","Floy","Floyd","Ford","Forest","Forrest","Foster","Frances","Francesca","Francesco","Francis","Francisca","Francisco","Franco","Frank","Frankie","Franz","Fred","Freda","Freddie","Freddy","Frederic","Frederick","Frederik","Frederique","Fredrick","Fredy","Freeda","Freeman","Freida","Frida","Frieda","Friedrich","Fritz","Furman","Gabe","Gabriel","Gabriella","Gabrielle","Gaetano","Gage","Gail","Gardner","Garett","Garfield","Garland","Garnet","Garnett","Garret","Garrett","Garrick","Garrison","Garry","Garth","Gaston","Gavin","Gay","Gayle","Gaylord","Gene","General","Genesis","Genevieve","Gennaro","Genoveva","Geo","Geoffrey","George","Georgette","Georgiana","Georgianna","Geovanni","Geovanny","Geovany","Gerald","Geraldine","Gerard","Gerardo","Gerda","Gerhard","Germaine","German","Gerry","Gerson","Gertrude","Gia","Gianni","Gideon","Gilbert","Gilberto","Gilda","Giles","Gillian","Gina","Gino","Giovani","Giovanna","Giovanni","Giovanny","Gisselle","Giuseppe","Gladyce","Gladys","Glen","Glenda","Glenna","Glennie","Gloria","Godfrey","Golda","Golden","Gonzalo","Gordon","Grace","Gracie","Graciela","Grady","Graham","Grant","Granville","Grayce","Grayson","Green","Greg","Gregg","Gregoria","Gregorio","Gregory","Greta","Gretchen","Greyson","Griffin","Grover","Guadalupe","Gudrun","Guido","Guillermo","Guiseppe","Gunnar","Gunner","Gus","Gussie","Gust","Gustave","Guy","Gwen","Gwendolyn","Hadley","Hailee","Hailey","Hailie","Hal","Haleigh","Haley","Halie","Halle","Hallie","Hank","Hanna","Hannah","Hans","Hardy","Harley","Harmon","Harmony","Harold","Harrison","Harry","Harvey","Haskell","Hassan","Hassie","Hattie","Haven","Hayden","Haylee","Hayley","Haylie","Hazel","Hazle","Heath","Heather","Heaven","Heber","Hector","Heidi","Helen","Helena","Helene","Helga","Hellen","Helmer","Heloise","Henderson","Henri","Henriette","Henry","Herbert","Herman","Hermann","Hermina","Herminia","Herminio","Hershel","Herta","Hertha","Hester","Hettie","Hilario","Hilbert","Hilda","Hildegard","Hillard","Hillary","Hilma","Hilton","Hipolito","Hiram","Hobart","Holden","Hollie","Hollis","Holly","Hope","Horace","Horacio","Hortense","Hosea","Houston","Howard","Howell","Hoyt","Hubert","Hudson","Hugh","Hulda","Humberto","Hunter","Hyman","Ian","Ibrahim","Icie","Ida","Idell","Idella","Ignacio","Ignatius","Ike","Ila","Ilene","Iliana","Ima","Imani","Imelda","Immanuel","Imogene","Ines","Irma","Irving","Irwin","Isaac","Isabel","Isabell","Isabella","Isabelle","Isac","Isadore","Isai","Isaiah","Isaias","Isidro","Ismael","Isobel","Isom","Israel","Issac","Itzel","Iva","Ivah","Ivory","Ivy","Izabella","Izaiah","Jabari","Jace","Jacey","Jacinthe","Jacinto","Jack","Jackeline","Jackie","Jacklyn","Jackson","Jacky","Jaclyn","Jacquelyn","Jacques","Jacynthe","Jada","Jade","Jaden","Jadon","Jadyn","Jaeden","Jaida","Jaiden","Jailyn","Jaime","Jairo","Jakayla","Jake","Jakob","Jaleel","Jalen","Jalon","Jalyn","Jamaal","Jamal","Jamar","Jamarcus","Jamel","Jameson","Jamey","Jamie","Jamil","Jamir","Jamison","Jammie","Jan","Jana","Janae","Jane","Janelle","Janessa","Janet","Janice","Janick","Janie","Janis","Janiya","Jannie","Jany","Jaquan","Jaquelin","Jaqueline","Jared","Jaren","Jarod","Jaron","Jarred","Jarrell","Jarret","Jarrett","Jarrod","Jarvis","Jasen","Jasmin","Jason","Jasper","Jaunita","Javier","Javon","Javonte","Jay","Jayce","Jaycee","Jayda","Jayde","Jayden","Jaydon","Jaylan","Jaylen","Jaylin","Jaylon","Jayme","Jayne","Jayson","Jazlyn","Jazmin","Jazmyn","Jazmyne","Jean","Jeanette","Jeanie","Jeanne","Jed","Jedediah","Jedidiah","Jeff","Jefferey","Jeffery","Jeffrey","Jeffry","Jena","Jenifer","Jennie","Jennifer","Jennings","Jennyfer","Jensen","Jerad","Jerald","Jeramie","Jeramy","Jerel","Jeremie","Jeremy","Jermain","Jermaine","Jermey","Jerod","Jerome","Jeromy","Jerrell","Jerrod","Jerrold","Jerry","Jess","Jesse","Jessica","Jessie","Jessika","Jessy","Jessyca","Jesus","Jett","Jettie","Jevon","Jewel","Jewell","Jillian","Jimmie","Jimmy","Jo","Joan","Joana","Joanie","Joanne","Joannie","Joanny","Joany","Joaquin","Jocelyn","Jodie","Jody","Joe","Joel","Joelle","Joesph","Joey","Johan","Johann","Johanna","Johathan","John","Johnathan","Johnathon","Johnnie","Johnny","Johnpaul","Johnson","Jolie","Jon","Jonas","Jonatan","Jonathan","Jonathon","Jordan","Jordane","Jordi","Jordon","Jordy","Jordyn","Jorge","Jose","Josefa","Josefina","Joseph","Josephine","Josh","Joshua","Joshuah","Josiah","Josiane","Josianne","Josie","Josue","Jovan","Jovani","Jovanny","Jovany","Joy","Joyce","Juana","Juanita","Judah","Judd","Jude","Judge","Judson","Judy","Jules","Julia","Julian","Juliana","Julianne","Julie","Julien","Juliet","Julio","Julius","June","Junior","Junius","Justen","Justice","Justina","Justine","Juston","Justus","Justyn","Juvenal","Juwan","Kacey","Kaci","Kacie","Kade","Kaden","Kadin","Kaela","Kaelyn","Kaia","Kailee","Kailey","Kailyn","Kaitlin","Kaitlyn","Kale","Kaleb","Kaleigh","Kaley","Kali","Kallie","Kameron","Kamille","Kamren","Kamron","Kamryn","Kane","Kara","Kareem","Karelle","Karen","Kari","Kariane","Karianne","Karina","Karine","Karl","Karlee","Karley","Karli","Karlie","Karolann","Karson","Kasandra","Kasey","Kassandra","Katarina","Katelin","Katelyn","Katelynn","Katharina","Katherine","Katheryn","Kathleen","Kathlyn","Kathryn","Kathryne","Katlyn","Katlynn","Katrina","Katrine","Kattie","Kavon","Kay","Kaya","Kaycee","Kayden","Kayla","Kaylah","Kaylee","Kayleigh","Kayley","Kayli","Kaylie","Kaylin","Keagan","Keanu","Keara","Keaton","Keegan","Keeley","Keely","Keenan","Keira","Keith","Kellen","Kelley","Kelli","Kellie","Kelly","Kelsi","Kelsie","Kelton","Kelvin","Ken","Kendall","Kendra","Kendrick","Kenna","Kennedi","Kennedy","Kenneth","Kennith","Kenny","Kenton","Kenya","Kenyatta","Kenyon","Keon","Keshaun","Keshawn","Keven","Kevin","Kevon","Keyon","Keyshawn","Khalid","Khalil","Kian","Kiana","Kianna","Kiara","Kiarra","Kiel","Kiera","Kieran","Kiley","Kim","Kimberly","King","Kip","Kira","Kirk","Kirsten","Kirstin","Kitty","Kobe","Koby","Kody","Kolby","Kole","Korbin","Korey","Kory","Kraig","Kris","Krista","Kristian","Kristin","Kristina","Kristofer","Kristoffer","Kristopher","Kristy","Krystal","Krystel","Krystina","Kurt","Kurtis","Kyla","Kyle","Kylee","Kyleigh","Kyler","Kylie","Kyra","Lacey","Lacy","Ladarius","Lafayette","Laila","Laisha","Lamar","Lambert","Lamont","Lance","Landen","Lane","Laney","Larissa","Laron","Larry","Larue","Laura","Laurel","Lauren","Laurence","Lauretta","Lauriane","Laurianne","Laurie","Laurine","Laury","Lauryn","Lavada","Lavern","Laverna","Laverne","Lavina","Lavinia","Lavon","Lavonne","Lawrence","Lawson","Layla","Layne","Lazaro","Lea","Leann","Leanna","Leanne","Leatha","Leda","Lee","Leif","Leila","Leilani","Lela","Lelah","Leland","Lelia","Lempi","Lemuel","Lenna","Lennie","Lenny","Lenora","Lenore","Leo","Leola","Leon","Leonard","Leonardo","Leone","Leonel","Leonie","Leonor","Leonora","Leopold","Leopoldo","Leora","Lera","Lesley","Leslie","Lesly","Lessie","Lester","Leta","Letha","Letitia","Levi","Lew","Lewis","Lexi","Lexie","Lexus","Lia","Liam","Liana","Libbie","Libby","Lila","Lilian","Liliana","Liliane","Lilla","Lillian","Lilliana","Lillie","Lilly","Lily","Lilyan","Lina","Lincoln","Linda","Lindsay","Lindsey","Linnea","Linnie","Linwood","Lionel","Lisa","Lisandro","Lisette","Litzy","Liza","Lizeth","Lizzie","Llewellyn","Lloyd","Logan","Lois","Lola","Lolita","Loma","Lon","London","Lonie","Lonnie","Lonny","Lonzo","Lora","Loraine","Loren","Lorena","Lorenz","Lorenza","Lorenzo","Lori","Lorine","Lorna","Lottie","Lou","Louie","Louisa","Lourdes","Louvenia","Lowell","Loy","Loyal","Loyce","Lucas","Luciano","Lucie","Lucienne","Lucile","Lucinda","Lucio","Lucious","Lucius","Lucy","Ludie","Ludwig","Lue","Luella","Luigi","Luis","Luisa","Lukas","Lula","Lulu","Luna","Lupe","Lura","Lurline","Luther","Luz","Lyda","Lydia","Lyla","Lynn","Lyric","Lysanne","Mabel","Mabelle","Mable","Mac","Macey","Maci","Macie","Mack","Mackenzie","Macy","Madaline","Madalyn","Maddison","Madeline","Madelyn","Madelynn","Madge","Madie","Madilyn","Madisen","Madison","Madisyn","Madonna","Madyson","Mae","Maegan","Maeve","Mafalda","Magali","Magdalen","Magdalena","Maggie","Magnolia","Magnus","Maia","Maida","Maiya","Major","Makayla","Makenna","Makenzie","Malachi","Malcolm","Malika","Malinda","Mallie","Mallory","Malvina","Mandy","Manley","Manuel","Manuela","Mara","Marc","Marcel","Marcelina","Marcelino","Marcella","Marcelle","Marcellus","Marcelo","Marcia","Marco","Marcos","Marcus","Margaret","Margarete","Margarett","Margaretta","Margarette","Margarita","Marge","Margie","Margot","Margret","Marguerite","Maria","Mariah","Mariam","Marian","Mariana","Mariane","Marianna","Marianne","Mariano","Maribel","Marie","Mariela","Marielle","Marietta","Marilie","Marilou","Marilyne","Marina","Mario","Marion","Marisa","Marisol","Maritza","Marjolaine","Marjorie","Marjory","Mark","Markus","Marlee","Marlen","Marlene","Marley","Marlin","Marlon","Marques","Marquis","Marquise","Marshall","Marta","Martin","Martina","Martine","Marty","Marvin","Mary","Maryam","Maryjane","Maryse","Mason","Mateo","Mathew","Mathias","Mathilde","Matilda","Matilde","Matt","Matteo","Mattie","Maud","Maude","Maudie","Maureen","Maurice","Mauricio","Maurine","Maverick","Mavis","Max","Maxie","Maxime","Maximilian","Maximillia","Maximillian","Maximo","Maximus","Maxine","Maxwell","May","Maya","Maybell","Maybelle","Maye","Maymie","Maynard","Mayra","Mazie","Mckayla","Mckenna","Mckenzie","Meagan","Meaghan","Meda","Megane","Meggie","Meghan","Mekhi","Melany","Melba","Melisa","Melissa","Mellie","Melody","Melvin","Melvina","Melyna","Melyssa","Mercedes","Meredith","Merl","Merle","Merlin","Merritt","Mertie","Mervin","Meta","Mia","Micaela","Micah","Michael","Michaela","Michale","Micheal","Michel","Michele","Michelle","Miguel","Mikayla","Mike","Mikel","Milan","Miles","Milford","Miller","Millie","Milo","Milton","Mina","Minerva","Minnie","Miracle","Mireille","Mireya","Misael","Missouri","Misty","Mitchel","Mitchell","Mittie","Modesta","Modesto","Mohamed","Mohammad","Mohammed","Moises","Mollie","Molly","Mona","Monica","Monique","Monroe","Monserrat","Monserrate","Montana","Monte","Monty","Morgan","Moriah","Morris","Mortimer","Morton","Mose","Moses","Moshe","Mossie","Mozell","Mozelle","Muhammad","Muriel","Murl","Murphy","Murray","Mustafa","Mya","Myah","Mylene","Myles","Myra","Myriam","Myrl","Myrna","Myron","Myrtice","Myrtie","Myrtis","Myrtle","Nadia","Nakia","Name","Nannie","Naomi","Naomie","Napoleon","Narciso","Nash","Nasir","Nat","Natalia","Natalie","Natasha","Nathan","Nathanael","Nathanial","Nathaniel","Nathen","Nayeli","Neal","Ned","Nedra","Neha","Neil","Nelda","Nella","Nelle","Nellie","Nels","Nelson","Neoma","Nestor","Nettie","Neva","Newell","Newton","Nia","Nicholas","Nicholaus","Nichole","Nick","Nicklaus","Nickolas","Nico","Nicola","Nicolas","Nicole","Nicolette","Nigel","Nikita","Nikki","Nikko","Niko","Nikolas","Nils","Nina","Noah","Noble","Noe","Noel","Noelia","Noemi","Noemie","Noemy","Nola","Nolan","Nona","Nora","Norbert","Norberto","Norene","Norma","Norris","Norval","Norwood","Nova","Novella","Nya","Nyah","Nyasia","Obie","Oceane","Ocie","Octavia","Oda","Odell","Odessa","Odie","Ofelia","Okey","Ola","Olaf","Ole","Olen","Oleta","Olga","Olin","Oliver","Ollie","Oma","Omari","Omer","Ona","Onie","Opal","Ophelia","Ora","Oral","Oran","Oren","Orie","Orin","Orion","Orland","Orlando","Orlo","Orpha","Orrin","Orval","Orville","Osbaldo","Osborne","Oscar","Osvaldo","Oswald","Oswaldo","Otha","Otho","Otilia","Otis","Ottilie","Ottis","Otto","Ova","Owen","Ozella","Pablo","Paige","Palma","Pamela","Pansy","Paolo","Paris","Parker","Pascale","Pasquale","Pat","Patience","Patricia","Patrick","Patsy","Pattie","Paul","Paula","Pauline","Paxton","Payton","Pearl","Pearlie","Pearline","Pedro","Peggie","Penelope","Percival","Percy","Perry","Pete","Peter","Petra","Peyton","Philip","Phoebe","Phyllis","Pierce","Pierre","Pietro","Pink","Pinkie","Piper","Polly","Porter","Precious","Presley","Preston","Price","Prince","Princess","Priscilla","Providenci","Prudence","Queen","Queenie","Quentin","Quincy","Quinn","Quinten","Quinton","Rachael","Rachel","Rachelle","Rae","Raegan","Rafael","Rafaela","Raheem","Rahsaan","Rahul","Raina","Raleigh","Ralph","Ramiro","Ramon","Ramona","Randal","Randall","Randi","Randy","Ransom","Raoul","Raphael","Raphaelle","Raquel","Rashad","Rashawn","Rasheed","Raul","Raven","Ray","Raymond","Raymundo","Reagan","Reanna","Reba","Rebeca","Rebecca","Rebeka","Rebekah","Reece","Reed","Reese","Regan","Reggie","Reginald","Reid","Reilly","Reina","Reinhold","Remington","Rene","Renee","Ressie","Reta","Retha","Retta","Reuben","Reva","Rex","Rey","Reyes","Reymundo","Reyna","Reynold","Rhea","Rhett","Rhianna","Rhiannon","Rhoda","Ricardo","Richard","Richie","Richmond","Rick","Rickey","Rickie","Ricky","Rico","Rigoberto","Riley","Rita","River","Robb","Robbie","Robert","Roberta","Roberto","Robin","Robyn","Rocio","Rocky","Rod","Roderick","Rodger","Rodolfo","Rodrick","Rodrigo","Roel","Rogelio","Roger","Rogers","Rolando","Rollin","Roma","Romaine","Roman","Ron","Ronaldo","Ronny","Roosevelt","Rory","Rosa","Rosalee","Rosalia","Rosalind","Rosalinda","Rosalyn","Rosamond","Rosanna","Rosario","Roscoe","Rose","Rosella","Roselyn","Rosemarie","Rosemary","Rosendo","Rosetta","Rosie","Rosina","Roslyn","Ross","Rossie","Rowan","Rowena","Rowland","Roxane","Roxanne","Roy","Royal","Royce","Rozella","Ruben","Rubie","Ruby","Rubye","Rudolph","Rudy","Rupert","Russ","Russel","Russell","Rusty","Ruth","Ruthe","Ruthie","Ryan","Ryann","Ryder","Rylan","Rylee","Ryleigh","Ryley","Sabina","Sabrina","Sabryna","Sadie","Sadye","Sage","Saige","Sallie","Sally","Salma","Salvador","Salvatore","Sam","Samanta","Samantha","Samara","Samir","Sammie","Sammy","Samson","Sandra","Sandrine","Sandy","Sanford","Santa","Santiago","Santina","Santino","Santos","Sarah","Sarai","Sarina","Sasha","Saul","Savanah","Savanna","Savannah","Savion","Scarlett","Schuyler","Scot","Scottie","Scotty","Seamus","Sean","Sebastian","Sedrick","Selena","Selina","Selmer","Serena","Serenity","Seth","Shad","Shaina","Shakira","Shana","Shane","Shanel","Shanelle","Shania","Shanie","Shaniya","Shanna","Shannon","Shanny","Shanon","Shany","Sharon","Shaun","Shawn","Shawna","Shaylee","Shayna","Shayne","Shea","Sheila","Sheldon","Shemar","Sheridan","Sherman","Sherwood","Shirley","Shyann","Shyanne","Sibyl","Sid","Sidney","Sienna","Sierra","Sigmund","Sigrid","Sigurd","Silas","Sim","Simeon","Simone","Sincere","Sister","Skye","Skyla","Skylar","Sofia","Soledad","Solon","Sonia","Sonny","Sonya","Sophia","Sophie","Spencer","Stacey","Stacy","Stan","Stanford","Stanley","Stanton","Stefan","Stefanie","Stella","Stephan","Stephania","Stephanie","Stephany","Stephen","Stephon","Sterling","Steve","Stevie","Stewart","Stone","Stuart","Summer","Sunny","Susan","Susana","Susanna","Susie","Suzanne","Sven","Syble","Sydnee","Sydney","Sydni","Sydnie","Sylvan","Sylvester","Sylvia","Tabitha","Tad","Talia","Talon","Tamara","Tamia","Tania","Tanner","Tanya","Tara","Taryn","Tate","Tatum","Tatyana","Taurean","Tavares","Taya","Taylor","Teagan","Ted","Telly","Terence","Teresa","Terrance","Terrell","Terrence","Terrill","Terry","Tess","Tessie","Tevin","Thad","Thaddeus","Thalia","Thea","Thelma","Theo","Theodora","Theodore","Theresa","Therese","Theresia","Theron","Thomas","Thora","Thurman","Tia","Tiana","Tianna","Tiara","Tierra","Tiffany","Tillman","Timmothy","Timmy","Timothy","Tina","Tito","Titus","Tobin","Toby","Tod","Tom","Tomas","Tomasa","Tommie","Toney","Toni","Tony","Torey","Torrance","Torrey","Toy","Trace","Tracey","Tracy","Travis","Travon","Tre","Tremaine","Tremayne","Trent","Trenton","Tressa","Tressie","Treva","Trever","Trevion","Trevor","Trey","Trinity","Trisha","Tristian","Tristin","Triston","Troy","Trudie","Trycia","Trystan","Turner","Twila","Tyler","Tyra","Tyree","Tyreek","Tyrel","Tyrell","Tyrese","Tyrique","Tyshawn","Tyson","Ubaldo","Ulices","Ulises","Una","Unique","Urban","Uriah","Uriel","Ursula","Vada","Valentin","Valentina","Valentine","Valerie","Vallie","Van","Vance","Vanessa","Vaughn","Veda","Velda","Vella","Velma","Velva","Vena","Verda","Verdie","Vergie","Verla","Verlie","Vern","Verna","Verner","Vernice","Vernie","Vernon","Verona","Veronica","Vesta","Vicenta","Vicente","Vickie","Vicky","Victor","Victoria","Vida","Vidal","Vilma","Vince","Vincent","Vincenza","Vincenzo","Vinnie","Viola","Violet","Violette","Virgie","Virgil","Virginia","Virginie","Vita","Vito","Viva","Vivian","Viviane","Vivianne","Vivien","Vivienne","Vladimir","Wade","Waino","Waldo","Walker","Wallace","Walter","Walton","Wanda","Ward","Warren","Watson","Wava","Waylon","Wayne","Webster","Weldon","Wellington","Wendell","Wendy","Werner","Westley","Weston","Whitney","Wilber","Wilbert","Wilburn","Wiley","Wilford","Wilfred","Wilfredo","Wilfrid","Wilhelm","Wilhelmine","Will","Willa","Willard","William","Willie","Willis","Willow","Willy","Wilma","Wilmer","Wilson","Wilton","Winfield","Winifred","Winnifred","Winona","Winston","Woodrow","Wyatt","Wyman","Xander","Xavier","Xzavier","Yadira","Yasmeen","Yasmin","Yasmine","Yazmin","Yesenia","Yessenia","Yolanda","Yoshiko","Yvette","Yvonne","Zachariah","Zachary","Zachery","Zack","Zackary","Zackery","Zakary","Zander","Zane","Zaria","Zechariah","Zelda","Zella","Zelma","Zena","Zetta","Zion","Zita","Zoe","Zoey","Zoie","Zoila","Zola","Zora","Zul"];};
-
-Faker.definitions.last_name = function (){return["Abbott","Abernathy","Abshire","Adams","Altenwerth","Anderson","Ankunding","Armstrong","Auer","Aufderhar","Bahringer","Bailey","Balistreri","Barrows","Bartell","Bartoletti","Barton","Bashirian","Batz","Bauch","Baumbach","Bayer","Beahan","Beatty","Bechtelar","Becker","Bednar","Beer","Beier","Berge","Bergnaum","Bergstrom","Bernhard","Bernier","Bins","Blanda","Blick","Block","Bode","Boehm","Bogan","Bogisich","Borer","Bosco","Botsford","Boyer","Boyle","Bradtke","Brakus","Braun","Breitenberg","Brekke","Brown","Bruen","Buckridge","Carroll","Carter","Cartwright","Casper","Cassin","Champlin","Christiansen","Cole","Collier","Collins","Conn","Connelly","Conroy","Considine","Corkery","Cormier","Corwin","Cremin","Crist","Crona","Cronin","Crooks","Cruickshank","Cummerata","Cummings","Dach","D'Amore","Daniel","Dare","Daugherty","Davis","Deckow","Denesik","Dibbert","Dickens","Dicki","Dickinson","Dietrich","Donnelly","Dooley","Douglas","Doyle","DuBuque","Durgan","Ebert","Effertz","Eichmann","Emard","Emmerich","Erdman","Ernser","Fadel","Fahey","Farrell","Fay","Feeney","Feest","Feil","Ferry","Fisher","Flatley","Frami","Franecki","Friesen","Fritsch","Funk","Gaylord","Gerhold","Gerlach","Gibson","Gislason","Gleason","Gleichner","Glover","Goldner","Goodwin","Gorczany","Gottlieb","Goyette","Grady","Graham","Grant","Green","Greenfelder","Greenholt","Grimes","Gulgowski","Gusikowski","Gutkowski","Guªann","Haag","Hackett","Hagenes","Hahn","Haley","Halvorson","Hamill","Hammes","Hand","Hane","Hansen","Harber","Harris","Harªann","Harvey","Hauck","Hayes","Heaney","Heathcote","Hegmann","Heidenreich","Heller","Herman","Hermann","Hermiston","Herzog","Hessel","Hettinger","Hickle","Hilll","Hills","Hilpert","Hintz","Hirthe","Hodkiewicz","Hoeger","Homenick","Hoppe","Howe","Howell","Hudson","Huel","Huels","Hyatt","Jacobi","Jacobs","Jacobson","Jakubowski","Jaskolski","Jast","Jenkins","Jerde","Jewess","Johns","Johnson","Johnston","Jones","Kassulke","Kautzer","Keebler","Keeling","Kemmer","Kerluke","Kertzmann","Kessler","Kiehn","Kihn","Kilback","King","Kirlin","Klein","Kling","Klocko","Koch","Koelpin","Koepp","Kohler","Konopelski","Koss","Kovacek","Kozey","Krajcik","Kreiger","Kris","Kshlerin","Kub","Kuhic","Kuhlman","Kuhn","Kulas","Kunde","Kunze","Kuphal","Kutch","Kuvalis","Labadie","Lakin","Lang","Langosh","Langworth","Larkin","Larson","Leannon","Lebsack","Ledner","Leffler","Legros","Lehner","Lemke","Lesch","Leuschke","Lind","Lindgren","Littel","Little","Lockman","Lowe","Lubowitz","Lueilwitz","Luettgen","Lynch","Macejkovic","Maggio","Mann","Mante","Marks","Marquardt","Marvin","Mayer","Mayert","McClure","McCullough","McDermott","McGlynn","McKenzie","McLaughlin","Medhurst","Mertz","Metz","Miller","Mills","Mitchell","Moen","Mohr","Monahan","Moore","Morar","Morissette","Mosciski","Mraz","Mueller","Muller","Murazik","Murphy","Murray","Nader","Nicolas","Nienow","Nikolaus","Nitzsche","Nolan","Oberbrunner","O'Connell","O'Conner","O'Hara","O'Keefe","O'Kon","Okuneva","Olson","Ondricka","O'Reilly","Orn","Ortiz","Osinski","Pacocha","Padberg","Pagac","Parisian","Parker","Paucek","Pfannerstill","Pfeffer","Pollich","Pouros","Powlowski","Predovic","Price","Prohaska","Prosacco","Purdy","Quigley","Quitzon","Rath","Ratke","Rau","Raynor","Reichel","Reichert","Reilly","Reinger","Rempel","Renner","Reynolds","Rice","Rippin","Ritchie","Robel","Roberts","Rodriguez","Rogahn","Rohan","Rolfson","Romaguera","Roob","Rosenbaum","Rowe","Ruecker","Runolfsdottir","Runolfsson","Runte","Russel","Rutherford","Ryan","Sanford","Satterfield","Sauer","Sawayn","Schaden","Schaefer","Schamberger","Schiller","Schimmel","Schinner","Schmeler","Schmidt","Schmitt","Schneider","Schoen","Schowalter","Schroeder","Schulist","Schultz","Schumm","Schuppe","Schuster","Senger","Shanahan","Shields","Simonis","Sipes","Skiles","Smith","Smitham","Spencer","Spinka","Sporer","Stamm","Stanton","Stark","Stehr","Steuber","Stiedemann","Stokes","Stoltenberg","Stracke","Streich","Stroman","Strosin","Swaniawski","Swift","Terry","Thiel","Thompson","Tillman","Torp","Torphy","Towne","Toy","Trantow","Tremblay","Treutel","Tromp","Turcotte","Turner","Ullrich","Upton","Vandervort","Veum","Volkman","Von","VonRueden","Waelchi","Walker","Walsh","Walter","Ward","Waters","Watsica","Weber","Wehner","Weimann","Weissnat","Welch","West","White","Wiegand","Wilderman","Wilkinson","Will","Williamson","Willms","Windler","Wintheiser","Wisoky","Wisozk","Witting","Wiza","Wolf","Wolff","Wuckert","Wunsch","Wyman","Yost","Yundt","Zboncak","Zemlak","Ziemann","Zieme","Zulauf"];};
-
-Faker.definitions.name_prefix = function (){return ["Mr.", "Mrs.", "Ms.", "Miss", "Dr."];};
-
-Faker.definitions.name_suffix = function (){return ["Jr.", "Sr.", "I", "II", "III", "IV", "V", "MD", "DDS", "PhD", "DVM"];};
-
-Faker.definitions.br_state = function () {
- return [
- 'Acre',
- 'Alagoas',
- 'Amapá',
- 'Amazonas',
- 'Bahia',
- 'Ceará',
- 'Distrito Federal',
- 'Espírito Santo',
- 'Goiás',
- 'Maranhão',
- 'Mato Grosso',
- 'Mato Grosso do Sul',
- 'Minas Gerais',
- 'Paraná',
- 'Paraíba',
- 'Pará',
- 'Pernambuco',
- 'Piauí',
- 'Rio de Janeiro',
- 'Rio Grande do Norte',
- 'Rio Grande do Sul',
- 'Rondônia',
- 'Roraima',
- 'Santa Catarina',
- 'Sergipe',
- 'São Paulo',
- 'Tocantins'
- ];
-};
+Faker.definitions.name_suffix = ["Jr.","Sr.","I","II","III","IV","V","MD","DDS","PhD","DVM"];
-Faker.definitions.br_state_abbr = function () {
- return [
- 'AC',
- 'AL',
- 'AP',
- 'AM',
- 'BA',
- 'CE',
- 'DF',
- 'ES',
- 'GO',
- 'MA',
- 'MT',
- 'MS',
- 'MG',
- 'PR',
- 'PB',
- 'PA',
- 'PE',
- 'PI',
- 'RJ',
- 'RN',
- 'RS',
- 'RO',
- 'RR',
- 'SC',
- 'SE',
- 'SP',
- 'TO'
- ];
-};
+Faker.definitions.br_state = ["Acre","Alagoas","Amapá","Amazonas","Bahia","Ceará","Distrito Federal","Espírito Santo","Goiás","Maranhão","Mato Grosso","Mato Grosso do Sul","Minas Gerais","Paraná","Paraíba","Pará","Pernambuco","Piauí","Rio de Janeiro","Rio Grande do Norte","Rio Grande do Sul","Rondônia","Roraima","Santa Catarina","Sergipe","São Paulo","Tocantins"];
+
+Faker.definitions.br_state_abbr = ["AC","AL","AP","AM","BA","CE","DF","ES","GO","MA","MT","MS","MG","PR","PB","PA","PE","PI","RJ","RN","RS","RO","RR","SC","SE","SP","TO"];
+
+Faker.definitions.us_state = ["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"];
+
+Faker.definitions.us_state_abbr = ["AL","AK","AS","AZ","AR","CA","CO","CT","DE","DC","FM","FL","GA","GU","HI","ID","IL","IN","IA","KS","KY","LA","ME","MH","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","MP","OH","OK","OR","PW","PA","PR","RI","SC","SD","TN","TX","UT","VT","VI","VA","WA","WV","WI","WY","AE","AA","AP"];
-Faker.definitions.us_state = function (){return ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'];};
+Faker.definitions.city_prefix = ["North","East","West","South","New","Lake","Port"];
-Faker.definitions.us_state_abbr = function (){return ["AL", "AK", "AS", "AZ", "AR", "CA", "CO", 'CT', "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY", "AE", "AA", "AP"];};
+Faker.definitions.city_suffix = ["town","ton","land","ville","berg","burgh","borough","bury","view","port","mouth","stad","furt","chester","mouth","fort","haven","side","shire"];
-Faker.definitions.city_prefix = function (){return ["North", "East", "West", "South", "New", "Lake", "Port"];};
+Faker.definitions.street_suffix = ["Alley","Avenue","Branch","Bridge","Brook","Brooks","Burg","Burgs","Bypass","Camp","Canyon","Cape","Causeway","Center","Centers","Circle","Circles","Cliff","Cliffs","Club","Common","Corner","Corners","Course","Court","Courts","Cove","Coves","Creek","Crescent","Crest","Crossing","Crossroad","Curve","Dale","Dam","Divide","Drive","Drive","Drives","Estate","Estates","Expressway","Extension","Extensions","Fall","Falls","Ferry","Field","Fields","Flat","Flats","Ford","Fords","Forest","Forge","Forges","Fork","Forks","Fort","Freeway","Garden","Gardens","Gateway","Glen","Glens","Green","Greens","Grove","Groves","Harbor","Harbors","Haven","Heights","Highway","Hill","Hills","Hollow","Inlet","Inlet","Island","Island","Islands","Islands","Isle","Isle","Junction","Junctions","Key","Keys","Knoll","Knolls","Lake","Lakes","Land","Landing","Lane","Light","Lights","Loaf","Lock","Locks","Locks","Lodge","Lodge","Loop","Mall","Manor","Manors","Meadow","Meadows","Mews","Mill","Mills","Mission","Mission","Motorway","Mount","Mountain","Mountain","Mountains","Mountains","Neck","Orchard","Oval","Overpass","Park","Parks","Parkway","Parkways","Pass","Passage","Path","Pike","Pine","Pines","Place","Plain","Plains","Plains","Plaza","Plaza","Point","Points","Port","Port","Ports","Ports","Prairie","Prairie","Radial","Ramp","Ranch","Rapid","Rapids","Rest","Ridge","Ridges","River","Road","Road","Roads","Roads","Route","Row","Rue","Run","Shoal","Shoals","Shore","Shores","Skyway","Spring","Springs","Springs","Spur","Spurs","Square","Square","Squares","Squares","Station","Station","Stravenue","Stravenue","Stream","Stream","Street","Street","Streets","Summit","Summit","Terrace","Throughway","Trace","Track","Trafficway","Trail","Trail","Tunnel","Tunnel","Turnpike","Turnpike","Underpass","Union","Unions","Valley","Valleys","Via","Viaduct","View","Views","Village","Village","","Villages","Ville","Vista","Vista","Walk","Walks","Wall","Way","Ways","Well","Wells"];
-Faker.definitions.city_suffix = function (){return ["town", "ton", "land", "ville", "berg", "burgh", "borough", "bury", "view", "port", "mouth", "stad", "furt", "chester", "mouth", "fort", "haven", "side", "shire"];};
+Faker.definitions.uk_county = ["Avon","Bedfordshire","Berkshire","Borders","Buckinghamshire","Cambridgeshire","Central","Cheshire","Cleveland","Clwyd","Cornwall","County Antrim","County Armagh","County Down","County Fermanagh","County Londonderry","County Tyrone","Cumbria","Derbyshire","Devon","Dorset","Dumfries and Galloway","Durham","Dyfed","East Sussex","Essex","Fife","Gloucestershire","Grampian","Greater Manchester","Gwent","Gwynedd County","Hampshire","Herefordshire","Hertfordshire","Highlands and Islands","Humberside","Isle of Wight","Kent","Lancashire","Leicestershire","Lincolnshire","Lothian","Merseyside","Mid Glamorgan","Norfolk","North Yorkshire","Northamptonshire","Northumberland","Nottinghamshire","Oxfordshire","Powys","Rutland","Shropshire","Somerset","South Glamorgan","South Yorkshire","Staffordshire","Strathclyde","Suffolk","Surrey","Tayside","Tyne and Wear","Warwickshire","West Glamorgan","West Midlands","West Sussex","West Yorkshire","Wiltshire","Worcestershire"];
-Faker.definitions.street_suffix = function (){return ["Alley","Avenue","Branch","Bridge","Brook","Brooks","Burg","Burgs","Bypass","Camp","Canyon","Cape","Causeway","Center","Centers","Circle","Circles","Cliff","Cliffs","Club","Common","Corner","Corners","Course","Court","Courts","Cove","Coves","Creek","Crescent","Crest","Crossing","Crossroad","Curve","Dale","Dam","Divide","Drive","Drive","Drives","Estate","Estates","Expressway","Extension","Extensions","Fall","Falls","Ferry","Field","Fields","Flat","Flats","Ford","Fords","Forest","Forge","Forges","Fork","Forks","Fort","Freeway","Garden","Gardens","Gateway","Glen","Glens","Green","Greens","Grove","Groves","Harbor","Harbors","Haven","Heights","Highway","Hill","Hills","Hollow","Inlet","Inlet","Island","Island","Islands","Islands","Isle","Isle","Junction","Junctions","Key","Keys","Knoll","Knolls","Lake","Lakes","Land","Landing","Lane","Light","Lights","Loaf","Lock","Locks","Locks","Lodge","Lodge","Loop","Mall","Manor","Manors","Meadow","Meadows","Mews","Mill","Mills","Mission","Mission","Motorway","Mount","Mountain","Mountain","Mountains","Mountains","Neck","Orchard","Oval","Overpass","Park","Parks","Parkway","Parkways","Pass","Passage","Path","Pike","Pine","Pines","Place","Plain","Plains","Plains","Plaza","Plaza","Point","Points","Port","Port","Ports","Ports","Prairie","Prairie","Radial","Ramp","Ranch","Rapid","Rapids","Rest","Ridge","Ridges","River","Road","Road","Roads","Roads","Route","Row","Rue","Run","Shoal","Shoals","Shore","Shores","Skyway","Spring","Springs","Springs","Spur","Spurs","Square","Square","Squares","Squares","Station","Station","Stravenue","Stravenue","Stream","Stream","Street","Street","Streets","Summit","Summit","Terrace","Throughway","Trace","Track","Trafficway","Trail","Trail","Tunnel","Tunnel","Turnpike","Turnpike","Underpass","Union","Unions","Valley","Valleys","Via","Viaduct","View","Views","Village","Village","","Villages","Ville","Vista","Vista","Walk","Walks","Wall","Way","Ways","Well","Wells"];};
+Faker.definitions.uk_country = ["England","Scotland","Wales","Northern Ireland"];
-Faker.definitions.uk_county = function (){return ['Avon', 'Bedfordshire', 'Berkshire', 'Borders', 'Buckinghamshire', 'Cambridgeshire', 'Central', 'Cheshire', 'Cleveland', 'Clwyd', 'Cornwall', 'County Antrim', 'County Armagh', 'County Down', 'County Fermanagh', 'County Londonderry', 'County Tyrone', 'Cumbria', 'Derbyshire', 'Devon', 'Dorset', 'Dumfries and Galloway', 'Durham', 'Dyfed', 'East Sussex', 'Essex', 'Fife', 'Gloucestershire', 'Grampian', 'Greater Manchester', 'Gwent', 'Gwynedd County', 'Hampshire', 'Herefordshire', 'Hertfordshire', 'Highlands and Islands', 'Humberside', 'Isle of Wight', 'Kent', 'Lancashire', 'Leicestershire', 'Lincolnshire', 'Lothian', 'Merseyside', 'Mid Glamorgan', 'Norfolk', 'North Yorkshire', 'Northamptonshire', 'Northumberland', 'Nottinghamshire', 'Oxfordshire', 'Powys', 'Rutland', 'Shropshire', 'Somerset', 'South Glamorgan', 'South Yorkshire', 'Staffordshire', 'Strathclyde', 'Suffolk', 'Surrey', 'Tayside', 'Tyne and Wear', 'Warwickshire', 'West Glamorgan', 'West Midlands', 'West Sussex', 'West Yorkshire', 'Wiltshire', 'Worcestershire'];};
+Faker.definitions.catch_phrase_adjective = ["Adaptive","Advanced","Ameliorated","Assimilated","Automated","Balanced","Business-focused","Centralized","Cloned","Compatible","Configurable","Cross-group","Cross-platform","Customer-focused","Customizable","Decentralized","De-engineered","Devolved","Digitized","Distributed","Diverse","Down-sized","Enhanced","Enterprise-wide","Ergonomic","Exclusive","Expanded","Extended","Face to face","Focused","Front-line","Fully-configurable","Function-based","Fundamental","Future-proofed","Grass-roots","Horizontal","Implemented","Innovative","Integrated","Intuitive","Inverse","Managed","Mandatory","Monitored","Multi-channelled","Multi-lateral","Multi-layered","Multi-tiered","Networked","Object-based","Open-architected","Open-source","Operative","Optimized","Optional","Organic","Organized","Persevering","Persistent","Phased","Polarised","Pre-emptive","Proactive","Profit-focused","Profound","Programmable","Progressive","Public-key","Quality-focused","Reactive","Realigned","Re-contextualized","Re-engineered","Reduced","Reverse-engineered","Right-sized","Robust","Seamless","Secured","Self-enabling","Sharable","Stand-alone","Streamlined","Switchable","Synchronised","Synergistic","Synergized","Team-oriented","Total","Triple-buffered","Universal","Up-sized","Upgradable","User-centric","User-friendly","Versatile","Virtual","Visionary","Vision-oriented"];
-Faker.definitions.uk_country = function (){return ['England', 'Scotland', 'Wales', 'Northern Ireland'];};
+Faker.definitions.catch_phrase_descriptor = ["24 hour","24/7","3rd generation","4th generation","5th generation","6th generation","actuating","analyzing","assymetric","asynchronous","attitude-oriented","background","bandwidth-monitored","bi-directional","bifurcated","bottom-line","clear-thinking","client-driven","client-server","coherent","cohesive","composite","context-sensitive","contextually-based","content-based","dedicated","demand-driven","didactic","directional","discrete","disintermediate","dynamic","eco-centric","empowering","encompassing","even-keeled","executive","explicit","exuding","fault-tolerant","foreground","fresh-thinking","full-range","global","grid-enabled","heuristic","high-level","holistic","homogeneous","human-resource","hybrid","impactful","incremental","intangible","interactive","intermediate","leading edge","local","logistical","maximized","methodical","mission-critical","mobile","modular","motivating","multimedia","multi-state","multi-tasking","national","needs-based","neutral","next generation","non-volatile","object-oriented","optimal","optimizing","radical","real-time","reciprocal","regional","responsive","scalable","secondary","solution-oriented","stable","static","systematic","systemic","system-worthy","tangible","tertiary","transitional","uniform","upward-trending","user-facing","value-added","web-enabled","well-modulated","zero administration","zero defect","zero tolerance"];
-Faker.definitions.catch_phrase_adjective = function (){return ["Adaptive", "Advanced", "Ameliorated", "Assimilated", "Automated", "Balanced", "Business-focused", "Centralized", "Cloned", "Compatible", "Configurable", "Cross-group", "Cross-platform", "Customer-focused", "Customizable", "Decentralized", "De-engineered", "Devolved", "Digitized", "Distributed", "Diverse", "Down-sized", "Enhanced", "Enterprise-wide", "Ergonomic", "Exclusive", "Expanded", "Extended", "Face to face", "Focused", "Front-line", "Fully-configurable", "Function-based", "Fundamental", "Future-proofed", "Grass-roots", "Horizontal", "Implemented", "Innovative", "Integrated", "Intuitive", "Inverse", "Managed", "Mandatory", "Monitored", "Multi-channelled", "Multi-lateral", "Multi-layered", "Multi-tiered", "Networked", "Object-based", "Open-architected", "Open-source", "Operative", "Optimized", "Optional", "Organic", "Organized", "Persevering", "Persistent", "Phased", "Polarised", "Pre-emptive", "Proactive", "Profit-focused", "Profound", "Programmable", "Progressive", "Public-key", "Quality-focused", "Reactive", "Realigned", "Re-contextualized", "Re-engineered", "Reduced", "Reverse-engineered", "Right-sized", "Robust", "Seamless", "Secured", "Self-enabling", "Sharable", "Stand-alone", "Streamlined", "Switchable", "Synchronised", "Synergistic", "Synergized", "Team-oriented", "Total", "Triple-buffered", "Universal", "Up-sized", "Upgradable", "User-centric", "User-friendly", "Versatile", "Virtual", "Visionary", "Vision-oriented"];};
+Faker.definitions.catch_phrase_noun = ["ability","access","adapter","algorithm","alliance","analyzer","application","approach","architecture","archive","artificial intelligence","array","attitude","benchmark","budgetary management","capability","capacity","challenge","circuit","collaboration","complexity","concept","conglomeration","contingency","core","customer loyalty","database","data-warehouse","definition","emulation","encoding","encryption","extranet","firmware","flexibility","focus group","forecast","frame","framework","function","functionalities","Graphic Interface","groupware","Graphical User Interface","hardware","help-desk","hierarchy","hub","implementation","info-mediaries","infrastructure","initiative","installation","instruction set","interface","internet solution","intranet","knowledge user","knowledge base","local area network","leverage","matrices","matrix","methodology","middleware","migration","model","moderator","monitoring","moratorium","neural-net","open architecture","open system","orchestration","paradigm","parallelism","policy","portal","pricing structure","process improvement","product","productivity","project","projection","protocol","secured line","service-desk","software","solution","standardization","strategy","structure","success","superstructure","support","synergy","system engine","task-force","throughput","time-frame","toolset","utilisation","website","workforce"];
-Faker.definitions.catch_phrase_descriptor = function (){return ["24 hour", "24/7", "3rd generation", "4th generation", "5th generation", "6th generation", "actuating", "analyzing", "assymetric", "asynchronous", "attitude-oriented", "background", "bandwidth-monitored", "bi-directional", "bifurcated", "bottom-line", "clear-thinking", "client-driven", "client-server", "coherent", "cohesive", "composite", "context-sensitive", "contextually-based", "content-based", "dedicated", "demand-driven", "didactic", "directional", "discrete", "disintermediate", "dynamic", "eco-centric", "empowering", "encompassing", "even-keeled", "executive", "explicit", "exuding", "fault-tolerant", "foreground", "fresh-thinking", "full-range", "global", "grid-enabled", "heuristic", "high-level", "holistic", "homogeneous", "human-resource", "hybrid", "impactful", "incremental", "intangible", "interactive", "intermediate", "leading edge", "local", "logistical", "maximized", "methodical", "mission-critical", "mobile", "modular", "motivating", "multimedia", "multi-state", "multi-tasking", "national", "needs-based", "neutral", "next generation", "non-volatile", "object-oriented", "optimal", "optimizing", "radical", "real-time", "reciprocal", "regional", "responsive", "scalable", "secondary", "solution-oriented", "stable", "static", "systematic", "systemic", "system-worthy", "tangible", "tertiary", "transitional", "uniform", "upward-trending", "user-facing", "value-added", "web-enabled", "well-modulated", "zero administration", "zero defect", "zero tolerance"];};
+Faker.definitions.bs_adjective = ["implement","utilize","integrate","streamline","optimize","evolve","transform","embrace","enable","orchestrate","leverage","reinvent","aggregate","architect","enhance","incentivize","morph","empower","envisioneer","monetize","harness","facilitate","seize","disintermediate","synergize","strategize","deploy","brand","grow","target","syndicate","synthesize","deliver","mesh","incubate","engage","maximize","benchmark","expedite","reintermediate","whiteboard","visualize","repurpose","innovate","scale","unleash","drive","extend","engineer","revolutionize","generate","exploit","transition","e-enable","iterate","cultivate","matrix","productize","redefine","recontextualize"];
-Faker.definitions.catch_phrase_noun = function (){return ["ability", "access", "adapter", "algorithm", "alliance", "analyzer", "application", "approach", "architecture", "archive", "artificial intelligence", "array", "attitude", "benchmark", "budgetary management", "capability", "capacity", "challenge", "circuit", "collaboration", "complexity", "concept", "conglomeration", "contingency", "core", "customer loyalty", "database", "data-warehouse", "definition", "emulation", "encoding", "encryption", "extranet", "firmware", "flexibility", "focus group", "forecast", "frame", "framework", "function", "functionalities", "Graphic Interface", "groupware", "Graphical User Interface", "hardware", "help-desk", "hierarchy", "hub", "implementation", "info-mediaries", "infrastructure", "initiative", "installation", "instruction set", "interface", "internet solution", "intranet", "knowledge user", "knowledge base", "local area network", "leverage", "matrices", "matrix", "methodology", "middleware", "migration", "model", "moderator", "monitoring", "moratorium", "neural-net", "open architecture", "open system", "orchestration", "paradigm", "parallelism", "policy", "portal", "pricing structure", "process improvement", "product", "productivity", "project", "projection", "protocol", "secured line", "service-desk", "software", "solution", "standardization", "strategy", "structure", "success", "superstructure", "support", "synergy", "system engine", "task-force", "throughput", "time-frame", "toolset", "utilisation", "website", "workforce"];};
+Faker.definitions.bs_buzz = ["clicks-and-mortar","value-added","vertical","proactive","robust","revolutionary","scalable","leading-edge","innovative","intuitive","strategic","e-business","mission-critical","sticky","one-to-one","24/7","end-to-end","global","B2B","B2C","granular","frictionless","virtual","viral","dynamic","24/365","best-of-breed","killer","magnetic","bleeding-edge","web-enabled","interactive","dot-com","sexy","back-end","real-time","efficient","front-end","distributed","seamless","extensible","turn-key","world-class","open-source","cross-platform","cross-media","synergistic","bricks-and-clicks","out-of-the-box","enterprise","integrated","impactful","wireless","transparent","next-generation","cutting-edge","user-centric","visionary","customized","ubiquitous","plug-and-play","collaborative","compelling","holistic","rich"];
-Faker.definitions.bs_adjective = function (){return ["implement", "utilize", "integrate", "streamline", "optimize", "evolve", "transform", "embrace", "enable", "orchestrate", "leverage", "reinvent", "aggregate", "architect", "enhance", "incentivize", "morph", "empower", "envisioneer", "monetize", "harness", "facilitate", "seize", "disintermediate", "synergize", "strategize", "deploy", "brand", "grow", "target", "syndicate", "synthesize", "deliver", "mesh", "incubate", "engage", "maximize", "benchmark", "expedite", "reintermediate", "whiteboard", "visualize", "repurpose", "innovate", "scale", "unleash", "drive", "extend", "engineer", "revolutionize", "generate", "exploit", "transition", "e-enable", "iterate", "cultivate", "matrix", "productize", "redefine", "recontextualize"];};
+Faker.definitions.bs_noun = ["synergies","web-readiness","paradigms","markets","partnerships","infrastructures","platforms","initiatives","channels","eyeballs","communities","ROI","solutions","e-tailers","e-services","action-items","portals","niches","technologies","content","vortals","supply-chains","convergence","relationships","architectures","interfaces","e-markets","e-commerce","systems","bandwidth","infomediaries","models","mindshare","deliverables","users","schemas","networks","applications","metrics","e-business","functionalities","experiences","web services","methodologies"];
-Faker.definitions.bs_buzz = function (){return ["clicks-and-mortar", "value-added", "vertical", "proactive", "robust", "revolutionary", "scalable", "leading-edge", "innovative", "intuitive", "strategic", "e-business", "mission-critical", "sticky", "one-to-one", "24/7", "end-to-end", "global", "B2B", "B2C", "granular", "frictionless", "virtual", "viral", "dynamic", "24/365", "best-of-breed", "killer", "magnetic", "bleeding-edge", "web-enabled", "interactive", "dot-com", "sexy", "back-end", "real-time", "efficient", "front-end", "distributed", "seamless", "extensible", "turn-key", "world-class", "open-source", "cross-platform", "cross-media", "synergistic", "bricks-and-clicks", "out-of-the-box", "enterprise", "integrated", "impactful", "wireless", "transparent", "next-generation", "cutting-edge", "user-centric", "visionary", "customized", "ubiquitous", "plug-and-play", "collaborative", "compelling", "holistic", "rich"];};
+Faker.definitions.domain_suffix = ["co.uk","com","us","net","ca","biz","info","name","io","org","biz","tv","me"];
-Faker.definitions.bs_noun = function (){return ["synergies", "web-readiness", "paradigms", "markets", "partnerships", "infrastructures", "platforms", "initiatives", "channels", "eyeballs", "communities", "ROI", "solutions", "e-tailers", "e-services", "action-items", "portals", "niches", "technologies", "content", "vortals", "supply-chains", "convergence", "relationships", "architectures", "interfaces", "e-markets", "e-commerce", "systems", "bandwidth", "infomediaries", "models", "mindshare", "deliverables", "users", "schemas", "networks", "applications", "metrics", "e-business", "functionalities", "experiences", "web services", "methodologies"];};
+Faker.definitions.lorem = ["alias","consequatur","aut","perferendis","sit","voluptatem","accusantium","doloremque","aperiam","eaque","ipsa","quae","ab","illo","inventore","veritatis","et","quasi","architecto","beatae","vitae","dicta","sunt","explicabo","aspernatur","aut","odit","aut","fugit","sed","quia","consequuntur","magni","dolores","eos","qui","ratione","voluptatem","sequi","nesciunt","neque","dolorem","ipsum","quia","dolor","sit","amet","consectetur","adipisci","velit","sed","quia","non","numquam","eius","modi","tempora","incidunt","ut","labore","et","dolore","magnam","aliquam","quaerat","voluptatem","ut","enim","ad","minima","veniam","quis","nostrum","exercitationem","ullam","corporis","nemo","enim","ipsam","voluptatem","quia","voluptas","sit","suscipit","laboriosam","nisi","ut","aliquid","ex","ea","commodi","consequatur","quis","autem","vel","eum","iure","reprehenderit","qui","in","ea","voluptate","velit","esse","quam","nihil","molestiae","et","iusto","odio","dignissimos","ducimus","qui","blanditiis","praesentium","laudantium","totam","rem","voluptatum","deleniti","atque","corrupti","quos","dolores","et","quas","molestias","excepturi","sint","occaecati","cupiditate","non","provident","sed","ut","perspiciatis","unde","omnis","iste","natus","error","similique","sunt","in","culpa","qui","officia","deserunt","mollitia","animi","id","est","laborum","et","dolorum","fuga","et","harum","quidem","rerum","facilis","est","et","expedita","distinctio","nam","libero","tempore","cum","soluta","nobis","est","eligendi","optio","cumque","nihil","impedit","quo","porro","quisquam","est","qui","minus","id","quod","maxime","placeat","facere","possimus","omnis","voluptas","assumenda","est","omnis","dolor","repellendus","temporibus","autem","quibusdam","et","aut","consequatur","vel","illum","qui","dolorem","eum","fugiat","quo","voluptas","nulla","pariatur","at","vero","eos","et","accusamus","officiis","debitis","aut","rerum","necessitatibus","saepe","eveniet","ut","et","voluptates","repudiandae","sint","et","molestiae","non","recusandae","itaque","earum","rerum","hic","tenetur","a","sapiente","delectus","ut","aut","reiciendis","voluptatibus","maiores","doloribus","asperiores","repellat"];
-Faker.definitions.domain_suffix = function (){return ["co.uk", "com", "us", "uk", "ca", "biz", "info", "name"];};
+Faker.definitions.phone_formats = ["###-###-####","(###)###-####","1-###-###-####","###.###.####","###-###-####","(###)###-####","1-###-###-####","###.###.####","###-###-#### x###","(###)###-#### x###","1-###-###-#### x###","###.###.#### x###","###-###-#### x####","(###)###-#### x####","1-###-###-#### x####","###.###.#### x####","###-###-#### x#####","(###)###-#### x#####","1-###-###-#### x#####","###.###.#### x#####"];
+var definitions = Faker.definitions;
+var Helpers = Faker.Helpers;
-Faker.definitions.lorem = function (){return ["alias","consequatur","aut","perferendis","sit","voluptatem","accusantium","doloremque","aperiam","eaque","ipsa","quae","ab","illo","inventore","veritatis","et","quasi","architecto","beatae","vitae","dicta","sunt","explicabo","aspernatur","aut","odit","aut","fugit","sed","quia","consequuntur","magni","dolores","eos","qui","ratione","voluptatem","sequi","nesciunt","neque","dolorem","ipsum","quia","dolor","sit","amet","consectetur","adipisci","velit","sed","quia","non","numquam","eius","modi","tempora","incidunt","ut","labore","et","dolore","magnam","aliquam","quaerat","voluptatem","ut","enim","ad","minima","veniam","quis","nostrum","exercitationem","ullam","corporis","nemo","enim","ipsam","voluptatem","quia","voluptas","sit","suscipit","laboriosam","nisi","ut","aliquid","ex","ea","commodi","consequatur","quis","autem","vel","eum","iure","reprehenderit","qui","in","ea","voluptate","velit","esse","quam","nihil","molestiae","et","iusto","odio","dignissimos","ducimus","qui","blanditiis","praesentium","laudantium","totam","rem","voluptatum","deleniti","atque","corrupti","quos","dolores","et","quas","molestias","excepturi","sint","occaecati","cupiditate","non","provident","sed","ut","perspiciatis","unde","omnis","iste","natus","error","similique","sunt","in","culpa","qui","officia","deserunt","mollitia","animi","id","est","laborum","et","dolorum","fuga","et","harum","quidem","rerum","facilis","est","et","expedita","distinctio","nam","libero","tempore","cum","soluta","nobis","est","eligendi","optio","cumque","nihil","impedit","quo","porro","quisquam","est","qui","minus","id","quod","maxime","placeat","facere","possimus","omnis","voluptas","assumenda","est","omnis","dolor","repellendus","temporibus","autem","quibusdam","et","aut","consequatur","vel","illum","qui","dolorem","eum","fugiat","quo","voluptas","nulla","pariatur","at","vero","eos","et","accusamus","officiis","debitis","aut","rerum","necessitatibus","saepe","eveniet","ut","et","voluptates","repudiandae","sint","et","molestiae","non","recusandae","itaque","earum","rerum","hic","tenetur","a","sapiente","delectus","ut","aut","reiciendis","voluptatibus","maiores","doloribus","asperiores","repellat"];};
+if (typeof define == 'function'){
+ define(function(){
+ return Faker;
+ });
+}
+else if(typeof module !== 'undefined' && module.exports) {
+ module.exports = Faker;
+}
+else {
+ window.Faker = Faker;
+}
-Faker.definitions.phone_formats = function (){return [
- '###-###-####',
- '(###)###-####',
- '1-###-###-####',
- '###.###.####',
- '###-###-####',
- '(###)###-####',
- '1-###-###-####',
- '###.###.####',
- '###-###-#### x###',
- '(###)###-#### x###',
- '1-###-###-#### x###',
- '###.###.#### x###',
- '###-###-#### x####',
- '(###)###-#### x####',
- '1-###-###-#### x####',
- '###.###.#### x####',
- '###-###-#### x#####',
- '(###)###-#### x#####',
- '1-###-###-#### x#####',
- '###.###.#### x#####'
-];};
-var definitions = Faker.definitions;
-var Helpers = Faker.Helpers;
-if(typeof exports != "undefined"){for(var prop in Faker){exports[prop] = Faker[prop];}} \ No newline at end of file
+}()); // end Faker closure \ No newline at end of file
diff --git a/tests/library_test.js b/examples/library_test.js
index 6ca84286..6ca84286 100644
--- a/tests/library_test.js
+++ b/examples/library_test.js
diff --git a/tests/node_min_test.js b/examples/node_min_test.js
index 6fc051a5..21da7632 100644..100755
--- a/tests/node_min_test.js
+++ b/examples/node_min_test.js
@@ -1,10 +1,9 @@
+#!/usr/bin/env node
+
var util = require('util');
var Faker = require('../Faker');
var card = Faker.Helpers.createCard();
-util.puts(JSON.stringify(card));
-
-
-
+util.puts(JSON.stringify(card)); \ No newline at end of file
diff --git a/index.js b/index.js
index a2d34858..fdccb091 100644
--- a/index.js
+++ b/index.js
@@ -4,7 +4,7 @@
you can include the Faker library into your existing node.js application by requiring the entire /Faker directory
- var Faker = require(./Faker);
+ var faker = require(./faker);
var randomName = Faker.Name.findName();
you can also simply include the "Faker.js" file which is the auto-generated bundled version of the Faker library
@@ -22,6 +22,8 @@ exports.Address = require('./lib/address');
exports.PhoneNumber = require('./lib/phone_number');
exports.Internet = require('./lib/internet');
exports.Company = require('./lib/company');
+exports.Image = require('./lib/image');
exports.Lorem = require('./lib/lorem');
exports.Helpers = require('./lib/helpers');
+exports.random = require('./lib/random');
exports.definitions = require('./lib/definitions');
diff --git a/lib/address.js b/lib/address.js
index de3cc16c..9f9a5082 100644
--- a/lib/address.js
+++ b/lib/address.js
@@ -1,85 +1,100 @@
var Helpers = require('./helpers');
+var Faker = require('../index');
var definitions = require('../lib/definitions');
-exports.zipCode = function() {
- return Helpers.replaceSymbolWithNumber(Helpers.randomize(["#####", '#####-####']));
-};
+var address = {
+ zipCode: function () {
+ return Helpers.replaceSymbolWithNumber(Faker.random.array_element(["#####", '#####-####']));
+ },
-exports.zipCodeFormat = function ( format ) {
- return Helpers.replaceSymbolWithNumber( ["#####", '#####-####'][format] );
-};
+ zipCodeFormat: function (format) {
+ return Helpers.replaceSymbolWithNumber(["#####", '#####-####'][format]);
+ },
-exports.city = function() {
- switch(Helpers.randomNumber(3))
- {
- case 0:
- return Helpers.randomize(definitions.city_prefix()) + " " + Helpers.randomize(definitions.first_name()) + Helpers.randomize(definitions.city_suffix());
- break;
- case 1:
- return Helpers.randomize(definitions.city_prefix()) + " " + Helpers.randomize(definitions.first_name());
- break;
- case 2:
- return Helpers.randomize(definitions.first_name()) + Helpers.randomize(definitions.city_suffix());
- break;
- case 3:
- return Helpers.randomize(definitions.last_name()) + Helpers.randomize(definitions.city_suffix());
- break;
- }
-};
+ city: function () {
+ var result;
+ switch (Faker.random.number(4)) {
+ case 0:
+ result = Faker.random.city_prefix() + " " + Faker.random.first_name() + Faker.random.city_suffix();
+ break;
+ case 1:
+ result = Faker.random.city_prefix() + " " + Faker.random.first_name();
+ break;
+ case 2:
+ result = Faker.random.first_name() + Faker.random.city_suffix();
+ break;
+ case 3:
+ result = Faker.random.last_name() + Faker.random.city_suffix();
+ break;
+ }
+ return result;
+ },
-exports.streetName = function() {
- switch(Helpers.randomNumber(1))
- {
- case 0:
- return Helpers.randomize(definitions.last_name()) + " " + Helpers.randomize(definitions.street_suffix());
- break;
- case 1:
- return Helpers.randomize(definitions.first_name()) + " " + Helpers.randomize(definitions.street_suffix());
- break;
- }
-};
+ streetName: function () {
+ var result;
+ switch (Faker.random.number(2)) {
+ case 0:
+ result = Faker.random.last_name() + " " + Faker.random.street_suffix();
+ break;
+ case 1:
+ result = Faker.random.first_name() + " " + Faker.random.street_suffix();
+ break;
+ }
+ return result;
+ },
-exports.streetAddress = function(i) {
- if( typeof i == 'undefined'){ var i = false;}
- var address = "";
- switch(Helpers.randomNumber(2))
- {
- case 0:
- address = Helpers.replaceSymbolWithNumber("#####") + " " + this.streetName();
- break;
- case 1:
- address = Helpers.replaceSymbolWithNumber("####") + " " + this.streetName();
- break;
- case 2:
- address = Helpers.replaceSymbolWithNumber("###") + " " + this.streetName();
- break;
- }
- var full_address = i ? address + " " + this.secondaryAddress() : address;
- return full_address;
-};
+ //
+ // TODO: change all these methods that accept a boolean to instead accept an options hash.
+ //
+ streetAddress: function (useFullAddress) {
+ if (useFullAddress === undefined) { useFullAddress = false; }
+ var address = "";
+ switch (Faker.random.number(3)) {
+ case 0:
+ address = Helpers.replaceSymbolWithNumber("#####") + " " + this.streetName();
+ break;
+ case 1:
+ address = Helpers.replaceSymbolWithNumber("####") + " " + this.streetName();
+ break;
+ case 2:
+ address = Helpers.replaceSymbolWithNumber("###") + " " + this.streetName();
+ break;
+ }
+ return useFullAddress ? (address + " " + this.secondaryAddress()) : address;
+ },
-exports.secondaryAddress = function() {
- return Helpers.replaceSymbolWithNumber(Helpers.randomize(
- [
- 'Apt. ###',
- 'Suite ###'
- ]
- )
- );
-};
+ secondaryAddress: function () {
+ return Helpers.replaceSymbolWithNumber(Faker.random.array_element(
+ [
+ 'Apt. ###',
+ 'Suite ###'
+ ]
+ ));
+ },
-exports.brState = function( abbr ) {
- return Helpers.randomize( definitions[ abbr ? 'br_state_abbr' : 'br_state']() );
-}
+ brState: function (useAbbr) {
+ return useAbbr ? Faker.random.br_state_abbr() : Faker.random.br_state();
+ },
-exports.ukCounty = function(){
- return Helpers.randomize(definitions.uk_county());
-};
+ ukCounty: function () {
+ return Faker.random.uk_county();
+ },
+
+ ukCountry: function () {
+ return Faker.random.uk_country();
+ },
-exports.ukCountry = function(){
- return Helpers.randomize(definitions.uk_country());
+ usState: function (useAbbr) {
+ return useAbbr ? Faker.random.us_state_abbr() : Faker.random.us_state();
+ },
+
+ latitude: function () {
+ return (Faker.random.number(180 * 10000) / 10000.0 - 90.0).toFixed(4);
+ },
+
+ longitude: function () {
+ return (Faker.random.number(360 * 10000) / 10000.0 - 180.0).toFixed(4);
+ }
};
-exports.usState = function( abbr ) {
- return Helpers.randomize( definitions[ abbr ? 'us_state_abbr' : 'us_state']() );
-} \ No newline at end of file
+module.exports = address;
diff --git a/lib/company.js b/lib/company.js
index a1e5d56a..2298f607 100644
--- a/lib/company.js
+++ b/lib/company.js
@@ -1,29 +1,36 @@
-var Helpers = require('./helpers');
-var definitions = require('../lib/definitions');
+var Faker = require('../index');
-exports.companyName = function ( format ) {
- switch( ( format ? format : Helpers.randomNumber(3) ) )
- {
- case 0:
- return Helpers.randomize(definitions.last_name()) + " " + this.companySuffix();
- break;
- case 1:
- return Helpers.randomize(definitions.last_name()) + "-" + Helpers.randomize(definitions.last_name()) ;
- break;
- case 2:
- return Helpers.randomize(definitions.last_name()) + "," + Helpers.randomize(definitions.last_name()) + " and " + Helpers.randomize(definitions.last_name());
- break;
- }
-};
+var company = {
+ suffixes: function () {
+ return ["Inc", "and Sons", "LLC", "Group", "and Daughters"];
+ },
-exports.companySuffix = function() {
- return Helpers.randomize(["Inc", "and\ Sons", "LLC", "Group", "and\ Daughters"]);
-};
+ companyName: function (format) {
+ switch ((format ? format : Faker.random.number(3))) {
+ case 0:
+ return Faker.Name.lastName() + " " + this.companySuffix();
+ case 1:
+ return Faker.Name.lastName() + "-" + Faker.Name.lastName();
+ case 2:
+ return Faker.Name.lastName() + ", " + Faker.Name.lastName() + " and " + Faker.Name.lastName();
+ }
+ },
+
+ companySuffix: function () {
+ return Faker.random.array_element(this.suffixes());
+ },
+
+ catchPhrase: function () {
+ return Faker.random.catch_phrase_adjective() + " " +
+ Faker.random.catch_phrase_descriptor() + " " +
+ Faker.random.catch_phrase_noun();
+ },
-exports.catchPhrase = function() {
- return Helpers.randomize(definitions.catch_phrase_adjective()) + " " + Helpers.randomize(definitions.catch_phrase_descriptor()) + " "+ Helpers.randomize(definitions.catch_phrase_noun());
+ bs: function () {
+ return Faker.random.bs_adjective() + " " +
+ Faker.random.bs_buzz() + " " +
+ Faker.random.bs_noun();
+ }
};
-exports.bs = function() {
- return Helpers.randomize(definitions.bs_adjective()) + " " + Helpers.randomize(definitions.bs_buzz()) + " "+ Helpers.randomize(definitions.bs_noun());
-}; \ No newline at end of file
+module.exports = company;
diff --git a/lib/definitions.js b/lib/definitions.js
index 5478af21..7303897c 100644
--- a/lib/definitions.js
+++ b/lib/definitions.js
@@ -1,135 +1,129 @@
// name.js definitions
+exports.first_name = ["Aaliyah", "Aaron", "Abagail", "Abbey", "Abbie", "Abbigail", "Abby", "Abdiel", "Abdul", "Abdullah", "Abe", "Abel", "Abelardo", "Abigail", "Abigale", "Abigayle", "Abner", "Abraham", "Ada", "Adah", "Adalberto", "Adaline", "Adam", "Adan", "Addie", "Addison", "Adela", "Adelbert", "Adele", "Adelia", "Adeline", "Adell", "Adella", "Adelle", "Aditya", "Adolf", "Adolfo", "Adolph", "Adolphus", "Adonis", "Adrain", "Adrian", "Adriana", "Adrianna", "Adriel", "Adrien", "Adrienne", "Afton", "Aglae", "Agnes", "Agustin", "Agustina", "Ahmad", "Ahmed", "Aida", "Aidan", "Aiden", "Aileen", "Aimee", "Aisha", "Aiyana", "Akeem", "Al", "Alaina", "Alan", "Alana", "Alanis", "Alanna", "Alayna", "Alba", "Albert", "Alberta", "Albertha", "Alberto", "Albin", "Albina", "Alda", "Alden", "Alec", "Aleen", "Alejandra", "Alejandrin", "Alek", "Alena", "Alene", "Alessandra", "Alessandro", "Alessia", "Aletha", "Alex", "Alexa", "Alexander", "Alexandra", "Alexandre", "Alexandrea", "Alexandria", "Alexandrine", "Alexandro", "Alexane", "Alexanne", "Alexie", "Alexis", "Alexys", "Alexzander", "Alf", "Alfonso", "Alfonzo", "Alford", "Alfred", "Alfreda", "Alfredo", "Ali", "Alia", "Alice", "Alicia", "Alisa", "Alisha", "Alison", "Alivia", "Aliya", "Aliyah", "Aliza", "Alize", "Allan", "Allen", "Allene", "Allie", "Allison", "Ally", "Alphonso", "Alta", "Althea", "Alva", "Alvah", "Alvena", "Alvera", "Alverta", "Alvina", "Alvis", "Alyce", "Alycia", "Alysa", "Alysha", "Alyson", "Alysson", "Amalia", "Amanda", "Amani", "Amara", "Amari", "Amaya", "Amber", "Ambrose", "Amelia", "Amelie", "Amely", "America", "Americo", "Amie", "Amina", "Amir", "Amira", "Amiya", "Amos", "Amparo", "Amy", "Amya", "Ana", "Anabel", "Anabelle", "Anahi", "Anais", "Anastacio", "Anastasia", "Anderson", "Andre", "Andreane", "Andreanne", "Andres", "Andrew", "Andy", "Angel", "Angela", "Angelica", "Angelina", "Angeline", "Angelita", "Angelo", "Angie", "Angus", "Anibal", "Anika", "Anissa", "Anita", "Aniya", "Aniyah", "Anjali", "Anna", "Annabel", "Annabell", "Annabelle", "Annalise", "Annamae", "Annamarie", "Anne", "Annetta", "Annette", "Annie", "Ansel", "Ansley", "Anthony", "Antoinette", "Antone", "Antonetta", "Antonette", "Antonia", "Antonietta", "Antonina", "Antonio", "Antwan", "Antwon", "Anya", "April", "Ara", "Araceli", "Aracely", "Arch", "Archibald", "Ardella", "Arden", "Ardith", "Arely", "Ari", "Ariane", "Arianna", "Aric", "Ariel", "Arielle", "Arjun", "Arlene", "Arlie", "Arlo", "Armand", "Armando", "Armani", "Arnaldo", "Arne", "Arno", "Arnold", "Arnoldo", "Arnulfo", "Aron", "Art", "Arthur", "Arturo", "Arvel", "Arvid", "Arvilla", "Aryanna", "Asa", "Asha", "Ashlee", "Ashleigh", "Ashley", "Ashly", "Ashlynn", "Ashton", "Ashtyn", "Asia", "Assunta", "Astrid", "Athena", "Aubree", "Aubrey", "Audie", "Audra", "Audreanne", "Audrey", "August", "Augusta", "Augustine", "Augustus", "Aurelia", "Aurelie", "Aurelio", "Aurore", "Austen", "Austin", "Austyn", "Autumn", "Ava", "Avery", "Avis", "Axel", "Ayana", "Ayden", "Ayla", "Aylin", "Baby", "Bailee", "Bailey", "Barbara", "Barney", "Baron", "Barrett", "Barry", "Bart", "Bartholome", "Barton", "Baylee", "Beatrice", "Beau", "Beaulah", "Bell", "Bella", "Belle", "Ben", "Benedict", "Benjamin", "Bennett", "Bennie", "Benny", "Benton", "Berenice", "Bernadette", "Bernadine", "Bernard", "Bernardo", "Berneice", "Bernhard", "Bernice", "Bernie", "Berniece", "Bernita", "Berry", "Bert", "Berta", "Bertha", "Bertram", "Bertrand", "Beryl", "Bessie", "Beth", "Bethany", "Bethel", "Betsy", "Bette", "Bettie", "Betty", "Bettye", "Beulah", "Beverly", "Bianka", "Bill", "Billie", "Billy", "Birdie", "Blair", "Blaise", "Blake", "Blanca", "Blanche", "Blaze", "Bo", "Bobbie", "Bobby", "Bonita", "Bonnie", "Boris", "Boyd", "Brad", "Braden", "Bradford", "Bradley", "Bradly", "Brady", "Braeden", "Brain", "Brandi", "Brando", "Brandon", "Brandt", "Brandy", "Brandyn", "Brannon", "Branson", "Brant", "Braulio", "Braxton", "Brayan", "Breana", "Breanna", "Breanne", "Brenda", "Brendan", "Brenden", "Brendon", "Brenna", "Brennan", "Brennon", "Brent", "Bret", "Brett", "Bria", "Brian", "Briana", "Brianne", "Brice", "Bridget", "Bridgette", "Bridie", "Brielle", "Brigitte", "Brionna", "Brisa", "Britney", "Brittany", "Brock", "Broderick", "Brody", "Brook", "Brooke", "Brooklyn", "Brooks", "Brown", "Bruce", "Bryana", "Bryce", "Brycen", "Bryon", "Buck", "Bud", "Buddy", "Buford", "Bulah", "Burdette", "Burley", "Burnice", "Buster", "Cade", "Caden", "Caesar", "Caitlyn", "Cale", "Caleb", "Caleigh", "Cali", "Calista", "Callie", "Camden", "Cameron", "Camila", "Camilla", "Camille", "Camren", "Camron", "Camryn", "Camylle", "Candace", "Candelario", "Candice", "Candida", "Candido", "Cara", "Carey", "Carissa", "Carlee", "Carleton", "Carley", "Carli", "Carlie", "Carlo", "Carlos", "Carlotta", "Carmel", "Carmela", "Carmella", "Carmelo", "Carmen", "Carmine", "Carol", "Carolanne", "Carole", "Carolina", "Caroline", "Carolyn", "Carolyne", "Carrie", "Carroll", "Carson", "Carter", "Cary", "Casandra", "Casey", "Casimer", "Casimir", "Casper", "Cassandra", "Cassandre", "Cassidy", "Cassie", "Catalina", "Caterina", "Catharine", "Catherine", "Cathrine", "Cathryn", "Cathy", "Cayla", "Ceasar", "Cecelia", "Cecil", "Cecile", "Cecilia", "Cedrick", "Celestine", "Celestino", "Celia", "Celine", "Cesar", "Chad", "Chadd", "Chadrick", "Chaim", "Chance", "Chandler", "Chanel", "Chanelle", "Charity", "Charlene", "Charles", "Charley", "Charlie", "Charlotte", "Chase", "Chasity", "Chauncey", "Chaya", "Chaz", "Chelsea", "Chelsey", "Chelsie", "Chesley", "Chester", "Chet", "Cheyanne", "Cheyenne", "Chloe", "Chris", "Christ", "Christa", "Christelle", "Christian", "Christiana", "Christina", "Christine", "Christop", "Christophe", "Christopher", "Christy", "Chyna", "Ciara", "Cicero", "Cielo", "Cierra", "Cindy", "Citlalli", "Clair", "Claire", "Clara", "Clarabelle", "Clare", "Clarissa", "Clark", "Claud", "Claude", "Claudia", "Claudie", "Claudine", "Clay", "Clemens", "Clement", "Clementina", "Clementine", "Clemmie", "Cleo", "Cleora", "Cleta", "Cletus", "Cleve", "Cleveland", "Clifford", "Clifton", "Clint", "Clinton", "Clotilde", "Clovis", "Cloyd", "Clyde", "Coby", "Cody", "Colby", "Cole", "Coleman", "Colin", "Colleen", "Collin", "Colt", "Colten", "Colton", "Columbus", "Concepcion", "Conner", "Connie", "Connor", "Conor", "Conrad", "Constance", "Constantin", "Consuelo", "Cooper", "Cora", "Coralie", "Corbin", "Cordelia", "Cordell", "Cordia", "Cordie", "Corene", "Corine", "Cornelius", "Cornell", "Corrine", "Cortez", "Cortney", "Cory", "Coty", "Courtney", "Coy", "Craig", "Crawford", "Creola", "Cristal", "Cristian", "Cristina", "Cristobal", "Cristopher", "Cruz", "Crystal", "Crystel", "Cullen", "Curt", "Curtis", "Cydney", "Cynthia", "Cyril", "Cyrus", "Dagmar", "Dahlia", "Daija", "Daisha", "Daisy", "Dakota", "Dale", "Dallas", "Dallin", "Dalton", "Damaris", "Dameon", "Damian", "Damien", "Damion", "Damon", "Dan", "Dana", "Dandre", "Dane", "D'angelo", "Dangelo", "Danial", "Daniela", "Daniella", "Danielle", "Danika", "Dannie", "Danny", "Dante", "Danyka", "Daphne", "Daphnee", "Daphney", "Darby", "Daren", "Darian", "Dariana", "Darien", "Dario", "Darion", "Darius", "Darlene", "Daron", "Darrel", "Darrell", "Darren", "Darrick", "Darrin", "Darrion", "Darron", "Darryl", "Darwin", "Daryl", "Dashawn", "Dasia", "Dave", "David", "Davin", "Davion", "Davon", "Davonte", "Dawn", "Dawson", "Dax", "Dayana", "Dayna", "Dayne", "Dayton", "Dean", "Deangelo", "Deanna", "Deborah", "Declan", "Dedric", "Dedrick", "Dee", "Deion", "Deja", "Dejah", "Dejon", "Dejuan", "Delaney", "Delbert", "Delfina", "Delia", "Delilah", "Dell", "Della", "Delmer", "Delores", "Delpha", "Delphia", "Delphine", "Delta", "Demarco", "Demarcus", "Demario", "Demetris", "Demetrius", "Demond", "Dena", "Denis", "Dennis", "Deon", "Deondre", "Deontae", "Deonte", "Dereck", "Derek", "Derick", "Deron", "Derrick", "Deshaun", "Deshawn", "Desiree", "Desmond", "Dessie", "Destany", "Destin", "Destinee", "Destiney", "Destini", "Destiny", "Devan", "Devante", "Deven", "Devin", "Devon", "Devonte", "Devyn", "Dewayne", "Dewitt", "Dexter", "Diamond", "Diana", "Dianna", "Diego", "Dillan", "Dillon", "Dimitri", "Dina", "Dino", "Dion", "Dixie", "Dock", "Dolly", "Dolores", "Domenic", "Domenica", "Domenick", "Domenico", "Domingo", "Dominic", "Dominique", "Don", "Donald", "Donato", "Donavon", "Donna", "Donnell", "Donnie", "Donny", "Dora", "Dorcas", "Dorian", "Doris", "Dorothea", "Dorothy", "Dorris", "Dortha", "Dorthy", "Doug", "Douglas", "Dovie", "Doyle", "Drake", "Drew", "Duane", "Dudley", "Dulce", "Duncan", "Durward", "Dustin", "Dusty", "Dwight", "Dylan", "Earl", "Earlene", "Earline", "Earnest", "Earnestine", "Easter", "Easton", "Ebba", "Ebony", "Ed", "Eda", "Edd", "Eddie", "Eden", "Edgar", "Edgardo", "Edison", "Edmond", "Edmund", "Edna", "Eduardo", "Edward", "Edwardo", "Edwin", "Edwina", "Edyth", "Edythe", "Effie", "Efrain", "Efren", "Eileen", "Einar", "Eino", "Eladio", "Elaina", "Elbert", "Elda", "Eldon", "Eldora", "Eldred", "Eldridge", "Eleanora", "Eleanore", "Eleazar", "Electa", "Elena", "Elenor", "Elenora", "Eleonore", "Elfrieda", "Eli", "Elian", "Eliane", "Elias", "Eliezer", "Elijah", "Elinor", "Elinore", "Elisa", "Elisabeth", "Elise", "Eliseo", "Elisha", "Elissa", "Eliza", "Elizabeth", "Ella", "Ellen", "Ellie", "Elliot", "Elliott", "Ellis", "Ellsworth", "Elmer", "Elmira", "Elmo", "Elmore", "Elna", "Elnora", "Elody", "Eloisa", "Eloise", "Elouise", "Eloy", "Elroy", "Elsa", "Else", "Elsie", "Elta", "Elton", "Elva", "Elvera", "Elvie", "Elvis", "Elwin", "Elwyn", "Elyse", "Elyssa", "Elza", "Emanuel", "Emelia", "Emelie", "Emely", "Emerald", "Emerson", "Emery", "Emie", "Emil", "Emile", "Emilia", "Emiliano", "Emilie", "Emilio", "Emily", "Emma", "Emmalee", "Emmanuel", "Emmanuelle", "Emmet", "Emmett", "Emmie", "Emmitt", "Emmy", "Emory", "Ena", "Enid", "Enoch", "Enola", "Enos", "Enrico", "Enrique", "Ephraim", "Era", "Eriberto", "Eric", "Erica", "Erich", "Erick", "Ericka", "Erik", "Erika", "Erin", "Erling", "Erna", "Ernest", "Ernestina", "Ernestine", "Ernesto", "Ernie", "Ervin", "Erwin", "Eryn", "Esmeralda", "Esperanza", "Esta", "Esteban", "Estefania", "Estel", "Estell", "Estella", "Estelle", "Estevan", "Esther", "Estrella", "Etha", "Ethan", "Ethel", "Ethelyn", "Ethyl", "Ettie", "Eudora", "Eugene", "Eugenia", "Eula", "Eulah", "Eulalia", "Euna", "Eunice", "Eusebio", "Eva", "Evalyn", "Evan", "Evangeline", "Evans", "Eve", "Eveline", "Evelyn", "Everardo", "Everett", "Everette", "Evert", "Evie", "Ewald", "Ewell", "Ezekiel", "Ezequiel", "Ezra", "Fabian", "Fabiola", "Fae", "Fannie", "Fanny", "Fatima", "Faustino", "Fausto", "Favian", "Fay", "Faye", "Federico", "Felicia", "Felicita", "Felicity", "Felipa", "Felipe", "Felix", "Felton", "Fermin", "Fern", "Fernando", "Ferne", "Fidel", "Filiberto", "Filomena", "Finn", "Fiona", "Flavie", "Flavio", "Fleta", "Fletcher", "Flo", "Florence", "Florencio", "Florian", "Florida", "Florine", "Flossie", "Floy", "Floyd", "Ford", "Forest", "Forrest", "Foster", "Frances", "Francesca", "Francesco", "Francis", "Francisca", "Francisco", "Franco", "Frank", "Frankie", "Franz", "Fred", "Freda", "Freddie", "Freddy", "Frederic", "Frederick", "Frederik", "Frederique", "Fredrick", "Fredy", "Freeda", "Freeman", "Freida", "Frida", "Frieda", "Friedrich", "Fritz", "Furman", "Gabe", "Gabriel", "Gabriella", "Gabrielle", "Gaetano", "Gage", "Gail", "Gardner", "Garett", "Garfield", "Garland", "Garnet", "Garnett", "Garret", "Garrett", "Garrick", "Garrison", "Garry", "Garth", "Gaston", "Gavin", "Gay", "Gayle", "Gaylord", "Gene", "General", "Genesis", "Genevieve", "Gennaro", "Genoveva", "Geo", "Geoffrey", "George", "Georgette", "Georgiana", "Georgianna", "Geovanni", "Geovanny", "Geovany", "Gerald", "Geraldine", "Gerard", "Gerardo", "Gerda", "Gerhard", "Germaine", "German", "Gerry", "Gerson", "Gertrude", "Gia", "Gianni", "Gideon", "Gilbert", "Gilberto", "Gilda", "Giles", "Gillian", "Gina", "Gino", "Giovani", "Giovanna", "Giovanni", "Giovanny", "Gisselle", "Giuseppe", "Gladyce", "Gladys", "Glen", "Glenda", "Glenna", "Glennie", "Gloria", "Godfrey", "Golda", "Golden", "Gonzalo", "Gordon", "Grace", "Gracie", "Graciela", "Grady", "Graham", "Grant", "Granville", "Grayce", "Grayson", "Green", "Greg", "Gregg", "Gregoria", "Gregorio", "Gregory", "Greta", "Gretchen", "Greyson", "Griffin", "Grover", "Guadalupe", "Gudrun", "Guido", "Guillermo", "Guiseppe", "Gunnar", "Gunner", "Gus", "Gussie", "Gust", "Gustave", "Guy", "Gwen", "Gwendolyn", "Hadley", "Hailee", "Hailey", "Hailie", "Hal", "Haleigh", "Haley", "Halie", "Halle", "Hallie", "Hank", "Hanna", "Hannah", "Hans", "Hardy", "Harley", "Harmon", "Harmony", "Harold", "Harrison", "Harry", "Harvey", "Haskell", "Hassan", "Hassie", "Hattie", "Haven", "Hayden", "Haylee", "Hayley", "Haylie", "Hazel", "Hazle", "Heath", "Heather", "Heaven", "Heber", "Hector", "Heidi", "Helen", "Helena", "Helene", "Helga", "Hellen", "Helmer", "Heloise", "Henderson", "Henri", "Henriette", "Henry", "Herbert", "Herman", "Hermann", "Hermina", "Herminia", "Herminio", "Hershel", "Herta", "Hertha", "Hester", "Hettie", "Hilario", "Hilbert", "Hilda", "Hildegard", "Hillard", "Hillary", "Hilma", "Hilton", "Hipolito", "Hiram", "Hobart", "Holden", "Hollie", "Hollis", "Holly", "Hope", "Horace", "Horacio", "Hortense", "Hosea", "Houston", "Howard", "Howell", "Hoyt", "Hubert", "Hudson", "Hugh", "Hulda", "Humberto", "Hunter", "Hyman", "Ian", "Ibrahim", "Icie", "Ida", "Idell", "Idella", "Ignacio", "Ignatius", "Ike", "Ila", "Ilene", "Iliana", "Ima", "Imani", "Imelda", "Immanuel", "Imogene", "Ines", "Irma", "Irving", "Irwin", "Isaac", "Isabel", "Isabell", "Isabella", "Isabelle", "Isac", "Isadore", "Isai", "Isaiah", "Isaias", "Isidro", "Ismael", "Isobel", "Isom", "Israel", "Issac", "Itzel", "Iva", "Ivah", "Ivory", "Ivy", "Izabella", "Izaiah", "Jabari", "Jace", "Jacey", "Jacinthe", "Jacinto", "Jack", "Jackeline", "Jackie", "Jacklyn", "Jackson", "Jacky", "Jaclyn", "Jacquelyn", "Jacques", "Jacynthe", "Jada", "Jade", "Jaden", "Jadon", "Jadyn", "Jaeden", "Jaida", "Jaiden", "Jailyn", "Jaime", "Jairo", "Jakayla", "Jake", "Jakob", "Jaleel", "Jalen", "Jalon", "Jalyn", "Jamaal", "Jamal", "Jamar", "Jamarcus", "Jamel", "Jameson", "Jamey", "Jamie", "Jamil", "Jamir", "Jamison", "Jammie", "Jan", "Jana", "Janae", "Jane", "Janelle", "Janessa", "Janet", "Janice", "Janick", "Janie", "Janis", "Janiya", "Jannie", "Jany", "Jaquan", "Jaquelin", "Jaqueline", "Jared", "Jaren", "Jarod", "Jaron", "Jarred", "Jarrell", "Jarret", "Jarrett", "Jarrod", "Jarvis", "Jasen", "Jasmin", "Jason", "Jasper", "Jaunita", "Javier", "Javon", "Javonte", "Jay", "Jayce", "Jaycee", "Jayda", "Jayde", "Jayden", "Jaydon", "Jaylan", "Jaylen", "Jaylin", "Jaylon", "Jayme", "Jayne", "Jayson", "Jazlyn", "Jazmin", "Jazmyn", "Jazmyne", "Jean", "Jeanette", "Jeanie", "Jeanne", "Jed", "Jedediah", "Jedidiah", "Jeff", "Jefferey", "Jeffery", "Jeffrey", "Jeffry", "Jena", "Jenifer", "Jennie", "Jennifer", "Jennings", "Jennyfer", "Jensen", "Jerad", "Jerald", "Jeramie", "Jeramy", "Jerel", "Jeremie", "Jeremy", "Jermain", "Jermaine", "Jermey", "Jerod", "Jerome", "Jeromy", "Jerrell", "Jerrod", "Jerrold", "Jerry", "Jess", "Jesse", "Jessica", "Jessie", "Jessika", "Jessy", "Jessyca", "Jesus", "Jett", "Jettie", "Jevon", "Jewel", "Jewell", "Jillian", "Jimmie", "Jimmy", "Jo", "Joan", "Joana", "Joanie", "Joanne", "Joannie", "Joanny", "Joany", "Joaquin", "Jocelyn", "Jodie", "Jody", "Joe", "Joel", "Joelle", "Joesph", "Joey", "Johan", "Johann", "Johanna", "Johathan", "John", "Johnathan", "Johnathon", "Johnnie", "Johnny", "Johnpaul", "Johnson", "Jolie", "Jon", "Jonas", "Jonatan", "Jonathan", "Jonathon", "Jordan", "Jordane", "Jordi", "Jordon", "Jordy", "Jordyn", "Jorge", "Jose", "Josefa", "Josefina", "Joseph", "Josephine", "Josh", "Joshua", "Joshuah", "Josiah", "Josiane", "Josianne", "Josie", "Josue", "Jovan", "Jovani", "Jovanny", "Jovany", "Joy", "Joyce", "Juana", "Juanita", "Judah", "Judd", "Jude", "Judge", "Judson", "Judy", "Jules", "Julia", "Julian", "Juliana", "Julianne", "Julie", "Julien", "Juliet", "Julio", "Julius", "June", "Junior", "Junius", "Justen", "Justice", "Justina", "Justine", "Juston", "Justus", "Justyn", "Juvenal", "Juwan", "Kacey", "Kaci", "Kacie", "Kade", "Kaden", "Kadin", "Kaela", "Kaelyn", "Kaia", "Kailee", "Kailey", "Kailyn", "Kaitlin", "Kaitlyn", "Kale", "Kaleb", "Kaleigh", "Kaley", "Kali", "Kallie", "Kameron", "Kamille", "Kamren", "Kamron", "Kamryn", "Kane", "Kara", "Kareem", "Karelle", "Karen", "Kari", "Kariane", "Karianne", "Karina", "Karine", "Karl", "Karlee", "Karley", "Karli", "Karlie", "Karolann", "Karson", "Kasandra", "Kasey", "Kassandra", "Katarina", "Katelin", "Katelyn", "Katelynn", "Katharina", "Katherine", "Katheryn", "Kathleen", "Kathlyn", "Kathryn", "Kathryne", "Katlyn", "Katlynn", "Katrina", "Katrine", "Kattie", "Kavon", "Kay", "Kaya", "Kaycee", "Kayden", "Kayla", "Kaylah", "Kaylee", "Kayleigh", "Kayley", "Kayli", "Kaylie", "Kaylin", "Keagan", "Keanu", "Keara", "Keaton", "Keegan", "Keeley", "Keely", "Keenan", "Keira", "Keith", "Kellen", "Kelley", "Kelli", "Kellie", "Kelly", "Kelsi", "Kelsie", "Kelton", "Kelvin", "Ken", "Kendall", "Kendra", "Kendrick", "Kenna", "Kennedi", "Kennedy", "Kenneth", "Kennith", "Kenny", "Kenton", "Kenya", "Kenyatta", "Kenyon", "Keon", "Keshaun", "Keshawn", "Keven", "Kevin", "Kevon", "Keyon", "Keyshawn", "Khalid", "Khalil", "Kian", "Kiana", "Kianna", "Kiara", "Kiarra", "Kiel", "Kiera", "Kieran", "Kiley", "Kim", "Kimberly", "King", "Kip", "Kira", "Kirk", "Kirsten", "Kirstin", "Kitty", "Kobe", "Koby", "Kody", "Kolby", "Kole", "Korbin", "Korey", "Kory", "Kraig", "Kris", "Krista", "Kristian", "Kristin", "Kristina", "Kristofer", "Kristoffer", "Kristopher", "Kristy", "Krystal", "Krystel", "Krystina", "Kurt", "Kurtis", "Kyla", "Kyle", "Kylee", "Kyleigh", "Kyler", "Kylie", "Kyra", "Lacey", "Lacy", "Ladarius", "Lafayette", "Laila", "Laisha", "Lamar", "Lambert", "Lamont", "Lance", "Landen", "Lane", "Laney", "Larissa", "Laron", "Larry", "Larue", "Laura", "Laurel", "Lauren", "Laurence", "Lauretta", "Lauriane", "Laurianne", "Laurie", "Laurine", "Laury", "Lauryn", "Lavada", "Lavern", "Laverna", "Laverne", "Lavina", "Lavinia", "Lavon", "Lavonne", "Lawrence", "Lawson", "Layla", "Layne", "Lazaro", "Lea", "Leann", "Leanna", "Leanne", "Leatha", "Leda", "Lee", "Leif", "Leila", "Leilani", "Lela", "Lelah", "Leland", "Lelia", "Lempi", "Lemuel", "Lenna", "Lennie", "Lenny", "Lenora", "Lenore", "Leo", "Leola", "Leon", "Leonard", "Leonardo", "Leone", "Leonel", "Leonie", "Leonor", "Leonora", "Leopold", "Leopoldo", "Leora", "Lera", "Lesley", "Leslie", "Lesly", "Lessie", "Lester", "Leta", "Letha", "Letitia", "Levi", "Lew", "Lewis", "Lexi", "Lexie", "Lexus", "Lia", "Liam", "Liana", "Libbie", "Libby", "Lila", "Lilian", "Liliana", "Liliane", "Lilla", "Lillian", "Lilliana", "Lillie", "Lilly", "Lily", "Lilyan", "Lina", "Lincoln", "Linda", "Lindsay", "Lindsey", "Linnea", "Linnie", "Linwood", "Lionel", "Lisa", "Lisandro", "Lisette", "Litzy", "Liza", "Lizeth", "Lizzie", "Llewellyn", "Lloyd", "Logan", "Lois", "Lola", "Lolita", "Loma", "Lon", "London", "Lonie", "Lonnie", "Lonny", "Lonzo", "Lora", "Loraine", "Loren", "Lorena", "Lorenz", "Lorenza", "Lorenzo", "Lori", "Lorine", "Lorna", "Lottie", "Lou", "Louie", "Louisa", "Lourdes", "Louvenia", "Lowell", "Loy", "Loyal", "Loyce", "Lucas", "Luciano", "Lucie", "Lucienne", "Lucile", "Lucinda", "Lucio", "Lucious", "Lucius", "Lucy", "Ludie", "Ludwig", "Lue", "Luella", "Luigi", "Luis", "Luisa", "Lukas", "Lula", "Lulu", "Luna", "Lupe", "Lura", "Lurline", "Luther", "Luz", "Lyda", "Lydia", "Lyla", "Lynn", "Lyric", "Lysanne", "Mabel", "Mabelle", "Mable", "Mac", "Macey", "Maci", "Macie", "Mack", "Mackenzie", "Macy", "Madaline", "Madalyn", "Maddison", "Madeline", "Madelyn", "Madelynn", "Madge", "Madie", "Madilyn", "Madisen", "Madison", "Madisyn", "Madonna", "Madyson", "Mae", "Maegan", "Maeve", "Mafalda", "Magali", "Magdalen", "Magdalena", "Maggie", "Magnolia", "Magnus", "Maia", "Maida", "Maiya", "Major", "Makayla", "Makenna", "Makenzie", "Malachi", "Malcolm", "Malika", "Malinda", "Mallie", "Mallory", "Malvina", "Mandy", "Manley", "Manuel", "Manuela", "Mara", "Marc", "Marcel", "Marcelina", "Marcelino", "Marcella", "Marcelle", "Marcellus", "Marcelo", "Marcia", "Marco", "Marcos", "Marcus", "Margaret", "Margarete", "Margarett", "Margaretta", "Margarette", "Margarita", "Marge", "Margie", "Margot", "Margret", "Marguerite", "Maria", "Mariah", "Mariam", "Marian", "Mariana", "Mariane", "Marianna", "Marianne", "Mariano", "Maribel", "Marie", "Mariela", "Marielle", "Marietta", "Marilie", "Marilou", "Marilyne", "Marina", "Mario", "Marion", "Marisa", "Marisol", "Maritza", "Marjolaine", "Marjorie", "Marjory", "Mark", "Markus", "Marlee", "Marlen", "Marlene", "Marley", "Marlin", "Marlon", "Marques", "Marquis", "Marquise", "Marshall", "Marta", "Martin", "Martina", "Martine", "Marty", "Marvin", "Mary", "Maryam", "Maryjane", "Maryse", "Mason", "Mateo", "Mathew", "Mathias", "Mathilde", "Matilda", "Matilde", "Matt", "Matteo", "Mattie", "Maud", "Maude", "Maudie", "Maureen", "Maurice", "Mauricio", "Maurine", "Maverick", "Mavis", "Max", "Maxie", "Maxime", "Maximilian", "Maximillia", "Maximillian", "Maximo", "Maximus", "Maxine", "Maxwell", "May", "Maya", "Maybell", "Maybelle", "Maye", "Maymie", "Maynard", "Mayra", "Mazie", "Mckayla", "Mckenna", "Mckenzie", "Meagan", "Meaghan", "Meda", "Megane", "Meggie", "Meghan", "Mekhi", "Melany", "Melba", "Melisa", "Melissa", "Mellie", "Melody", "Melvin", "Melvina", "Melyna", "Melyssa", "Mercedes", "Meredith", "Merl", "Merle", "Merlin", "Merritt", "Mertie", "Mervin", "Meta", "Mia", "Micaela", "Micah", "Michael", "Michaela", "Michale", "Micheal", "Michel", "Michele", "Michelle", "Miguel", "Mikayla", "Mike", "Mikel", "Milan", "Miles", "Milford", "Miller", "Millie", "Milo", "Milton", "Mina", "Minerva", "Minnie", "Miracle", "Mireille", "Mireya", "Misael", "Missouri", "Misty", "Mitchel", "Mitchell", "Mittie", "Modesta", "Modesto", "Mohamed", "Mohammad", "Mohammed", "Moises", "Mollie", "Molly", "Mona", "Monica", "Monique", "Monroe", "Monserrat", "Monserrate", "Montana", "Monte", "Monty", "Morgan", "Moriah", "Morris", "Mortimer", "Morton", "Mose", "Moses", "Moshe", "Mossie", "Mozell", "Mozelle", "Muhammad", "Muriel", "Murl", "Murphy", "Murray", "Mustafa", "Mya", "Myah", "Mylene", "Myles", "Myra", "Myriam", "Myrl", "Myrna", "Myron", "Myrtice", "Myrtie", "Myrtis", "Myrtle", "Nadia", "Nakia", "Name", "Nannie", "Naomi", "Naomie", "Napoleon", "Narciso", "Nash", "Nasir", "Nat", "Natalia", "Natalie", "Natasha", "Nathan", "Nathanael", "Nathanial", "Nathaniel", "Nathen", "Nayeli", "Neal", "Ned", "Nedra", "Neha", "Neil", "Nelda", "Nella", "Nelle", "Nellie", "Nels", "Nelson", "Neoma", "Nestor", "Nettie", "Neva", "Newell", "Newton", "Nia", "Nicholas", "Nicholaus", "Nichole", "Nick", "Nicklaus", "Nickolas", "Nico", "Nicola", "Nicolas", "Nicole", "Nicolette", "Nigel", "Nikita", "Nikki", "Nikko", "Niko", "Nikolas", "Nils", "Nina", "Noah", "Noble", "Noe", "Noel", "Noelia", "Noemi", "Noemie", "Noemy", "Nola", "Nolan", "Nona", "Nora", "Norbert", "Norberto", "Norene", "Norma", "Norris", "Norval", "Norwood", "Nova", "Novella", "Nya", "Nyah", "Nyasia", "Obie", "Oceane", "Ocie", "Octavia", "Oda", "Odell", "Odessa", "Odie", "Ofelia", "Okey", "Ola", "Olaf", "Ole", "Olen", "Oleta", "Olga", "Olin", "Oliver", "Ollie", "Oma", "Omari", "Omer", "Ona", "Onie", "Opal", "Ophelia", "Ora", "Oral", "Oran", "Oren", "Orie", "Orin", "Orion", "Orland", "Orlando", "Orlo", "Orpha", "Orrin", "Orval", "Orville", "Osbaldo", "Osborne", "Oscar", "Osvaldo", "Oswald", "Oswaldo", "Otha", "Otho", "Otilia", "Otis", "Ottilie", "Ottis", "Otto", "Ova", "Owen", "Ozella", "Pablo", "Paige", "Palma", "Pamela", "Pansy", "Paolo", "Paris", "Parker", "Pascale", "Pasquale", "Pat", "Patience", "Patricia", "Patrick", "Patsy", "Pattie", "Paul", "Paula", "Pauline", "Paxton", "Payton", "Pearl", "Pearlie", "Pearline", "Pedro", "Peggie", "Penelope", "Percival", "Percy", "Perry", "Pete", "Peter", "Petra", "Peyton", "Philip", "Phoebe", "Phyllis", "Pierce", "Pierre", "Pietro", "Pink", "Pinkie", "Piper", "Polly", "Porter", "Precious", "Presley", "Preston", "Price", "Prince", "Princess", "Priscilla", "Providenci", "Prudence", "Queen", "Queenie", "Quentin", "Quincy", "Quinn", "Quinten", "Quinton", "Rachael", "Rachel", "Rachelle", "Rae", "Raegan", "Rafael", "Rafaela", "Raheem", "Rahsaan", "Rahul", "Raina", "Raleigh", "Ralph", "Ramiro", "Ramon", "Ramona", "Randal", "Randall", "Randi", "Randy", "Ransom", "Raoul", "Raphael", "Raphaelle", "Raquel", "Rashad", "Rashawn", "Rasheed", "Raul", "Raven", "Ray", "Raymond", "Raymundo", "Reagan", "Reanna", "Reba", "Rebeca", "Rebecca", "Rebeka", "Rebekah", "Reece", "Reed", "Reese", "Regan", "Reggie", "Reginald", "Reid", "Reilly", "Reina", "Reinhold", "Remington", "Rene", "Renee", "Ressie", "Reta", "Retha", "Retta", "Reuben", "Reva", "Rex", "Rey", "Reyes", "Reymundo", "Reyna", "Reynold", "Rhea", "Rhett", "Rhianna", "Rhiannon", "Rhoda", "Ricardo", "Richard", "Richie", "Richmond", "Rick", "Rickey", "Rickie", "Ricky", "Rico", "Rigoberto", "Riley", "Rita", "River", "Robb", "Robbie", "Robert", "Roberta", "Roberto", "Robin", "Robyn", "Rocio", "Rocky", "Rod", "Roderick", "Rodger", "Rodolfo", "Rodrick", "Rodrigo", "Roel", "Rogelio", "Roger", "Rogers", "Rolando", "Rollin", "Roma", "Romaine", "Roman", "Ron", "Ronaldo", "Ronny", "Roosevelt", "Rory", "Rosa", "Rosalee", "Rosalia", "Rosalind", "Rosalinda", "Rosalyn", "Rosamond", "Rosanna", "Rosario", "Roscoe", "Rose", "Rosella", "Roselyn", "Rosemarie", "Rosemary", "Rosendo", "Rosetta", "Rosie", "Rosina", "Roslyn", "Ross", "Rossie", "Rowan", "Rowena", "Rowland", "Roxane", "Roxanne", "Roy", "Royal", "Royce", "Rozella", "Ruben", "Rubie", "Ruby", "Rubye", "Rudolph", "Rudy", "Rupert", "Russ", "Russel", "Russell", "Rusty", "Ruth", "Ruthe", "Ruthie", "Ryan", "Ryann", "Ryder", "Rylan", "Rylee", "Ryleigh", "Ryley", "Sabina", "Sabrina", "Sabryna", "Sadie", "Sadye", "Sage", "Saige", "Sallie", "Sally", "Salma", "Salvador", "Salvatore", "Sam", "Samanta", "Samantha", "Samara", "Samir", "Sammie", "Sammy", "Samson", "Sandra", "Sandrine", "Sandy", "Sanford", "Santa", "Santiago", "Santina", "Santino", "Santos", "Sarah", "Sarai", "Sarina", "Sasha", "Saul", "Savanah", "Savanna", "Savannah", "Savion", "Scarlett", "Schuyler", "Scot", "Scottie", "Scotty", "Seamus", "Sean", "Sebastian", "Sedrick", "Selena", "Selina", "Selmer", "Serena", "Serenity", "Seth", "Shad", "Shaina", "Shakira", "Shana", "Shane", "Shanel", "Shanelle", "Shania", "Shanie", "Shaniya", "Shanna", "Shannon", "Shanny", "Shanon", "Shany", "Sharon", "Shaun", "Shawn", "Shawna", "Shaylee", "Shayna", "Shayne", "Shea", "Sheila", "Sheldon", "Shemar", "Sheridan", "Sherman", "Sherwood", "Shirley", "Shyann", "Shyanne", "Sibyl", "Sid", "Sidney", "Sienna", "Sierra", "Sigmund", "Sigrid", "Sigurd", "Silas", "Sim", "Simeon", "Simone", "Sincere", "Sister", "Skye", "Skyla", "Skylar", "Sofia", "Soledad", "Solon", "Sonia", "Sonny", "Sonya", "Sophia", "Sophie", "Spencer", "Stacey", "Stacy", "Stan", "Stanford", "Stanley", "Stanton", "Stefan", "Stefanie", "Stella", "Stephan", "Stephania", "Stephanie", "Stephany", "Stephen", "Stephon", "Sterling", "Steve", "Stevie", "Stewart", "Stone", "Stuart", "Summer", "Sunny", "Susan", "Susana", "Susanna", "Susie", "Suzanne", "Sven", "Syble", "Sydnee", "Sydney", "Sydni", "Sydnie", "Sylvan", "Sylvester", "Sylvia", "Tabitha", "Tad", "Talia", "Talon", "Tamara", "Tamia", "Tania", "Tanner", "Tanya", "Tara", "Taryn", "Tate", "Tatum", "Tatyana", "Taurean", "Tavares", "Taya", "Taylor", "Teagan", "Ted", "Telly", "Terence", "Teresa", "Terrance", "Terrell", "Terrence", "Terrill", "Terry", "Tess", "Tessie", "Tevin", "Thad", "Thaddeus", "Thalia", "Thea", "Thelma", "Theo", "Theodora", "Theodore", "Theresa", "Therese", "Theresia", "Theron", "Thomas", "Thora", "Thurman", "Tia", "Tiana", "Tianna", "Tiara", "Tierra", "Tiffany", "Tillman", "Timmothy", "Timmy", "Timothy", "Tina", "Tito", "Titus", "Tobin", "Toby", "Tod", "Tom", "Tomas", "Tomasa", "Tommie", "Toney", "Toni", "Tony", "Torey", "Torrance", "Torrey", "Toy", "Trace", "Tracey", "Tracy", "Travis", "Travon", "Tre", "Tremaine", "Tremayne", "Trent", "Trenton", "Tressa", "Tressie", "Treva", "Trever", "Trevion", "Trevor", "Trey", "Trinity", "Trisha", "Tristian", "Tristin", "Triston", "Troy", "Trudie", "Trycia", "Trystan", "Turner", "Twila", "Tyler", "Tyra", "Tyree", "Tyreek", "Tyrel", "Tyrell", "Tyrese", "Tyrique", "Tyshawn", "Tyson", "Ubaldo", "Ulices", "Ulises", "Una", "Unique", "Urban", "Uriah", "Uriel", "Ursula", "Vada", "Valentin", "Valentina", "Valentine", "Valerie", "Vallie", "Van", "Vance", "Vanessa", "Vaughn", "Veda", "Velda", "Vella", "Velma", "Velva", "Vena", "Verda", "Verdie", "Vergie", "Verla", "Verlie", "Vern", "Verna", "Verner", "Vernice", "Vernie", "Vernon", "Verona", "Veronica", "Vesta", "Vicenta", "Vicente", "Vickie", "Vicky", "Victor", "Victoria", "Vida", "Vidal", "Vilma", "Vince", "Vincent", "Vincenza", "Vincenzo", "Vinnie", "Viola", "Violet", "Violette", "Virgie", "Virgil", "Virginia", "Virginie", "Vita", "Vito", "Viva", "Vivian", "Viviane", "Vivianne", "Vivien", "Vivienne", "Vladimir", "Wade", "Waino", "Waldo", "Walker", "Wallace", "Walter", "Walton", "Wanda", "Ward", "Warren", "Watson", "Wava", "Waylon", "Wayne", "Webster", "Weldon", "Wellington", "Wendell", "Wendy", "Werner", "Westley", "Weston", "Whitney", "Wilber", "Wilbert", "Wilburn", "Wiley", "Wilford", "Wilfred", "Wilfredo", "Wilfrid", "Wilhelm", "Wilhelmine", "Will", "Willa", "Willard", "William", "Willie", "Willis", "Willow", "Willy", "Wilma", "Wilmer", "Wilson", "Wilton", "Winfield", "Winifred", "Winnifred", "Winona", "Winston", "Woodrow", "Wyatt", "Wyman", "Xander", "Xavier", "Xzavier", "Yadira", "Yasmeen", "Yasmin", "Yasmine", "Yazmin", "Yesenia", "Yessenia", "Yolanda", "Yoshiko", "Yvette", "Yvonne", "Zachariah", "Zachary", "Zachery", "Zack", "Zackary", "Zackery", "Zakary", "Zander", "Zane", "Zaria", "Zechariah", "Zelda", "Zella", "Zelma", "Zena", "Zetta", "Zion", "Zita", "Zoe", "Zoey", "Zoie", "Zoila", "Zola", "Zora", "Zul"];
-exports.first_name = function(){return ["Aaliyah","Aaron","Abagail","Abbey","Abbie","Abbigail","Abby","Abdiel","Abdul","Abdullah","Abe","Abel","Abelardo","Abigail","Abigale","Abigayle","Abner","Abraham","Ada","Adah","Adalberto","Adaline","Adam","Adan","Addie","Addison","Adela","Adelbert","Adele","Adelia","Adeline","Adell","Adella","Adelle","Aditya","Adolf","Adolfo","Adolph","Adolphus","Adonis","Adrain","Adrian","Adriana","Adrianna","Adriel","Adrien","Adrienne","Afton","Aglae","Agnes","Agustin","Agustina","Ahmad","Ahmed","Aida","Aidan","Aiden","Aileen","Aimee","Aisha","Aiyana","Akeem","Al","Alaina","Alan","Alana","Alanis","Alanna","Alayna","Alba","Albert","Alberta","Albertha","Alberto","Albin","Albina","Alda","Alden","Alec","Aleen","Alejandra","Alejandrin","Alek","Alena","Alene","Alessandra","Alessandro","Alessia","Aletha","Alex","Alexa","Alexander","Alexandra","Alexandre","Alexandrea","Alexandria","Alexandrine","Alexandro","Alexane","Alexanne","Alexie","Alexis","Alexys","Alexzander","Alf","Alfonso","Alfonzo","Alford","Alfred","Alfreda","Alfredo","Ali","Alia","Alice","Alicia","Alisa","Alisha","Alison","Alivia","Aliya","Aliyah","Aliza","Alize","Allan","Allen","Allene","Allie","Allison","Ally","Alphonso","Alta","Althea","Alva","Alvah","Alvena","Alvera","Alverta","Alvina","Alvis","Alyce","Alycia","Alysa","Alysha","Alyson","Alysson","Amalia","Amanda","Amani","Amara","Amari","Amaya","Amber","Ambrose","Amelia","Amelie","Amely","America","Americo","Amie","Amina","Amir","Amira","Amiya","Amos","Amparo","Amy","Amya","Ana","Anabel","Anabelle","Anahi","Anais","Anastacio","Anastasia","Anderson","Andre","Andreane","Andreanne","Andres","Andrew","Andy","Angel","Angela","Angelica","Angelina","Angeline","Angelita","Angelo","Angie","Angus","Anibal","Anika","Anissa","Anita","Aniya","Aniyah","Anjali","Anna","Annabel","Annabell","Annabelle","Annalise","Annamae","Annamarie","Anne","Annetta","Annette","Annie","Ansel","Ansley","Anthony","Antoinette","Antone","Antonetta","Antonette","Antonia","Antonietta","Antonina","Antonio","Antwan","Antwon","Anya","April","Ara","Araceli","Aracely","Arch","Archibald","Ardella","Arden","Ardith","Arely","Ari","Ariane","Arianna","Aric","Ariel","Arielle","Arjun","Arlene","Arlie","Arlo","Armand","Armando","Armani","Arnaldo","Arne","Arno","Arnold","Arnoldo","Arnulfo","Aron","Art","Arthur","Arturo","Arvel","Arvid","Arvilla","Aryanna","Asa","Asha","Ashlee","Ashleigh","Ashley","Ashly","Ashlynn","Ashton","Ashtyn","Asia","Assunta","Astrid","Athena","Aubree","Aubrey","Audie","Audra","Audreanne","Audrey","August","Augusta","Augustine","Augustus","Aurelia","Aurelie","Aurelio","Aurore","Austen","Austin","Austyn","Autumn","Ava","Avery","Avis","Axel","Ayana","Ayden","Ayla","Aylin","Baby","Bailee","Bailey","Barbara","Barney","Baron","Barrett","Barry","Bart","Bartholome","Barton","Baylee","Beatrice","Beau","Beaulah","Bell","Bella","Belle","Ben","Benedict","Benjamin","Bennett","Bennie","Benny","Benton","Berenice","Bernadette","Bernadine","Bernard","Bernardo","Berneice","Bernhard","Bernice","Bernie","Berniece","Bernita","Berry","Bert","Berta","Bertha","Bertram","Bertrand","Beryl","Bessie","Beth","Bethany","Bethel","Betsy","Bette","Bettie","Betty","Bettye","Beulah","Beverly","Bianka","Bill","Billie","Billy","Birdie","Blair","Blaise","Blake","Blanca","Blanche","Blaze","Bo","Bobbie","Bobby","Bonita","Bonnie","Boris","Boyd","Brad","Braden","Bradford","Bradley","Bradly","Brady","Braeden","Brain","Brandi","Brando","Brandon","Brandt","Brandy","Brandyn","Brannon","Branson","Brant","Braulio","Braxton","Brayan","Breana","Breanna","Breanne","Brenda","Brendan","Brenden","Brendon","Brenna","Brennan","Brennon","Brent","Bret","Brett","Bria","Brian","Briana","Brianne","Brice","Bridget","Bridgette","Bridie","Brielle","Brigitte","Brionna","Brisa","Britney","Brittany","Brock","Broderick","Brody","Brook","Brooke","Brooklyn","Brooks","Brown","Bruce","Bryana","Bryce","Brycen","Bryon","Buck","Bud","Buddy","Buford","Bulah","Burdette","Burley","Burnice","Buster","Cade","Caden","Caesar","Caitlyn","Cale","Caleb","Caleigh","Cali","Calista","Callie","Camden","Cameron","Camila","Camilla","Camille","Camren","Camron","Camryn","Camylle","Candace","Candelario","Candice","Candida","Candido","Cara","Carey","Carissa","Carlee","Carleton","Carley","Carli","Carlie","Carlo","Carlos","Carlotta","Carmel","Carmela","Carmella","Carmelo","Carmen","Carmine","Carol","Carolanne","Carole","Carolina","Caroline","Carolyn","Carolyne","Carrie","Carroll","Carson","Carter","Cary","Casandra","Casey","Casimer","Casimir","Casper","Cassandra","Cassandre","Cassidy","Cassie","Catalina","Caterina","Catharine","Catherine","Cathrine","Cathryn","Cathy","Cayla","Ceasar","Cecelia","Cecil","Cecile","Cecilia","Cedrick","Celestine","Celestino","Celia","Celine","Cesar","Chad","Chadd","Chadrick","Chaim","Chance","Chandler","Chanel","Chanelle","Charity","Charlene","Charles","Charley","Charlie","Charlotte","Chase","Chasity","Chauncey","Chaya","Chaz","Chelsea","Chelsey","Chelsie","Chesley","Chester","Chet","Cheyanne","Cheyenne","Chloe","Chris","Christ","Christa","Christelle","Christian","Christiana","Christina","Christine","Christop","Christophe","Christopher","Christy","Chyna","Ciara","Cicero","Cielo","Cierra","Cindy","Citlalli","Clair","Claire","Clara","Clarabelle","Clare","Clarissa","Clark","Claud","Claude","Claudia","Claudie","Claudine","Clay","Clemens","Clement","Clementina","Clementine","Clemmie","Cleo","Cleora","Cleta","Cletus","Cleve","Cleveland","Clifford","Clifton","Clint","Clinton","Clotilde","Clovis","Cloyd","Clyde","Coby","Cody","Colby","Cole","Coleman","Colin","Colleen","Collin","Colt","Colten","Colton","Columbus","Concepcion","Conner","Connie","Connor","Conor","Conrad","Constance","Constantin","Consuelo","Cooper","Cora","Coralie","Corbin","Cordelia","Cordell","Cordia","Cordie","Corene","Corine","Cornelius","Cornell","Corrine","Cortez","Cortney","Cory","Coty","Courtney","Coy","Craig","Crawford","Creola","Cristal","Cristian","Cristina","Cristobal","Cristopher","Cruz","Crystal","Crystel","Cullen","Curt","Curtis","Cydney","Cynthia","Cyril","Cyrus","Dagmar","Dahlia","Daija","Daisha","Daisy","Dakota","Dale","Dallas","Dallin","Dalton","Damaris","Dameon","Damian","Damien","Damion","Damon","Dan","Dana","Dandre","Dane","D'angelo","Dangelo","Danial","Daniela","Daniella","Danielle","Danika","Dannie","Danny","Dante","Danyka","Daphne","Daphnee","Daphney","Darby","Daren","Darian","Dariana","Darien","Dario","Darion","Darius","Darlene","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darrion","Darron","Darryl","Darwin","Daryl","Dashawn","Dasia","Dave","David","Davin","Davion","Davon","Davonte","Dawn","Dawson","Dax","Dayana","Dayna","Dayne","Dayton","Dean","Deangelo","Deanna","Deborah","Declan","Dedric","Dedrick","Dee","Deion","Deja","Dejah","Dejon","Dejuan","Delaney","Delbert","Delfina","Delia","Delilah","Dell","Della","Delmer","Delores","Delpha","Delphia","Delphine","Delta","Demarco","Demarcus","Demario","Demetris","Demetrius","Demond","Dena","Denis","Dennis","Deon","Deondre","Deontae","Deonte","Dereck","Derek","Derick","Deron","Derrick","Deshaun","Deshawn","Desiree","Desmond","Dessie","Destany","Destin","Destinee","Destiney","Destini","Destiny","Devan","Devante","Deven","Devin","Devon","Devonte","Devyn","Dewayne","Dewitt","Dexter","Diamond","Diana","Dianna","Diego","Dillan","Dillon","Dimitri","Dina","Dino","Dion","Dixie","Dock","Dolly","Dolores","Domenic","Domenica","Domenick","Domenico","Domingo","Dominic","Dominique","Don","Donald","Donato","Donavon","Donna","Donnell","Donnie","Donny","Dora","Dorcas","Dorian","Doris","Dorothea","Dorothy","Dorris","Dortha","Dorthy","Doug","Douglas","Dovie","Doyle","Drake","Drew","Duane","Dudley","Dulce","Duncan","Durward","Dustin","Dusty","Dwight","Dylan","Earl","Earlene","Earline","Earnest","Earnestine","Easter","Easton","Ebba","Ebony","Ed","Eda","Edd","Eddie","Eden","Edgar","Edgardo","Edison","Edmond","Edmund","Edna","Eduardo","Edward","Edwardo","Edwin","Edwina","Edyth","Edythe","Effie","Efrain","Efren","Eileen","Einar","Eino","Eladio","Elaina","Elbert","Elda","Eldon","Eldora","Eldred","Eldridge","Eleanora","Eleanore","Eleazar","Electa","Elena","Elenor","Elenora","Eleonore","Elfrieda","Eli","Elian","Eliane","Elias","Eliezer","Elijah","Elinor","Elinore","Elisa","Elisabeth","Elise","Eliseo","Elisha","Elissa","Eliza","Elizabeth","Ella","Ellen","Ellie","Elliot","Elliott","Ellis","Ellsworth","Elmer","Elmira","Elmo","Elmore","Elna","Elnora","Elody","Eloisa","Eloise","Elouise","Eloy","Elroy","Elsa","Else","Elsie","Elta","Elton","Elva","Elvera","Elvie","Elvis","Elwin","Elwyn","Elyse","Elyssa","Elza","Emanuel","Emelia","Emelie","Emely","Emerald","Emerson","Emery","Emie","Emil","Emile","Emilia","Emiliano","Emilie","Emilio","Emily","Emma","Emmalee","Emmanuel","Emmanuelle","Emmet","Emmett","Emmie","Emmitt","Emmy","Emory","Ena","Enid","Enoch","Enola","Enos","Enrico","Enrique","Ephraim","Era","Eriberto","Eric","Erica","Erich","Erick","Ericka","Erik","Erika","Erin","Erling","Erna","Ernest","Ernestina","Ernestine","Ernesto","Ernie","Ervin","Erwin","Eryn","Esmeralda","Esperanza","Esta","Esteban","Estefania","Estel","Estell","Estella","Estelle","Estevan","Esther","Estrella","Etha","Ethan","Ethel","Ethelyn","Ethyl","Ettie","Eudora","Eugene","Eugenia","Eula","Eulah","Eulalia","Euna","Eunice","Eusebio","Eva","Evalyn","Evan","Evangeline","Evans","Eve","Eveline","Evelyn","Everardo","Everett","Everette","Evert","Evie","Ewald","Ewell","Ezekiel","Ezequiel","Ezra","Fabian","Fabiola","Fae","Fannie","Fanny","Fatima","Faustino","Fausto","Favian","Fay","Faye","Federico","Felicia","Felicita","Felicity","Felipa","Felipe","Felix","Felton","Fermin","Fern","Fernando","Ferne","Fidel","Filiberto","Filomena","Finn","Fiona","Flavie","Flavio","Fleta","Fletcher","Flo","Florence","Florencio","Florian","Florida","Florine","Flossie","Floy","Floyd","Ford","Forest","Forrest","Foster","Frances","Francesca","Francesco","Francis","Francisca","Francisco","Franco","Frank","Frankie","Franz","Fred","Freda","Freddie","Freddy","Frederic","Frederick","Frederik","Frederique","Fredrick","Fredy","Freeda","Freeman","Freida","Frida","Frieda","Friedrich","Fritz","Furman","Gabe","Gabriel","Gabriella","Gabrielle","Gaetano","Gage","Gail","Gardner","Garett","Garfield","Garland","Garnet","Garnett","Garret","Garrett","Garrick","Garrison","Garry","Garth","Gaston","Gavin","Gay","Gayle","Gaylord","Gene","General","Genesis","Genevieve","Gennaro","Genoveva","Geo","Geoffrey","George","Georgette","Georgiana","Georgianna","Geovanni","Geovanny","Geovany","Gerald","Geraldine","Gerard","Gerardo","Gerda","Gerhard","Germaine","German","Gerry","Gerson","Gertrude","Gia","Gianni","Gideon","Gilbert","Gilberto","Gilda","Giles","Gillian","Gina","Gino","Giovani","Giovanna","Giovanni","Giovanny","Gisselle","Giuseppe","Gladyce","Gladys","Glen","Glenda","Glenna","Glennie","Gloria","Godfrey","Golda","Golden","Gonzalo","Gordon","Grace","Gracie","Graciela","Grady","Graham","Grant","Granville","Grayce","Grayson","Green","Greg","Gregg","Gregoria","Gregorio","Gregory","Greta","Gretchen","Greyson","Griffin","Grover","Guadalupe","Gudrun","Guido","Guillermo","Guiseppe","Gunnar","Gunner","Gus","Gussie","Gust","Gustave","Guy","Gwen","Gwendolyn","Hadley","Hailee","Hailey","Hailie","Hal","Haleigh","Haley","Halie","Halle","Hallie","Hank","Hanna","Hannah","Hans","Hardy","Harley","Harmon","Harmony","Harold","Harrison","Harry","Harvey","Haskell","Hassan","Hassie","Hattie","Haven","Hayden","Haylee","Hayley","Haylie","Hazel","Hazle","Heath","Heather","Heaven","Heber","Hector","Heidi","Helen","Helena","Helene","Helga","Hellen","Helmer","Heloise","Henderson","Henri","Henriette","Henry","Herbert","Herman","Hermann","Hermina","Herminia","Herminio","Hershel","Herta","Hertha","Hester","Hettie","Hilario","Hilbert","Hilda","Hildegard","Hillard","Hillary","Hilma","Hilton","Hipolito","Hiram","Hobart","Holden","Hollie","Hollis","Holly","Hope","Horace","Horacio","Hortense","Hosea","Houston","Howard","Howell","Hoyt","Hubert","Hudson","Hugh","Hulda","Humberto","Hunter","Hyman","Ian","Ibrahim","Icie","Ida","Idell","Idella","Ignacio","Ignatius","Ike","Ila","Ilene","Iliana","Ima","Imani","Imelda","Immanuel","Imogene","Ines","Irma","Irving","Irwin","Isaac","Isabel","Isabell","Isabella","Isabelle","Isac","Isadore","Isai","Isaiah","Isaias","Isidro","Ismael","Isobel","Isom","Israel","Issac","Itzel","Iva","Ivah","Ivory","Ivy","Izabella","Izaiah","Jabari","Jace","Jacey","Jacinthe","Jacinto","Jack","Jackeline","Jackie","Jacklyn","Jackson","Jacky","Jaclyn","Jacquelyn","Jacques","Jacynthe","Jada","Jade","Jaden","Jadon","Jadyn","Jaeden","Jaida","Jaiden","Jailyn","Jaime","Jairo","Jakayla","Jake","Jakob","Jaleel","Jalen","Jalon","Jalyn","Jamaal","Jamal","Jamar","Jamarcus","Jamel","Jameson","Jamey","Jamie","Jamil","Jamir","Jamison","Jammie","Jan","Jana","Janae","Jane","Janelle","Janessa","Janet","Janice","Janick","Janie","Janis","Janiya","Jannie","Jany","Jaquan","Jaquelin","Jaqueline","Jared","Jaren","Jarod","Jaron","Jarred","Jarrell","Jarret","Jarrett","Jarrod","Jarvis","Jasen","Jasmin","Jason","Jasper","Jaunita","Javier","Javon","Javonte","Jay","Jayce","Jaycee","Jayda","Jayde","Jayden","Jaydon","Jaylan","Jaylen","Jaylin","Jaylon","Jayme","Jayne","Jayson","Jazlyn","Jazmin","Jazmyn","Jazmyne","Jean","Jeanette","Jeanie","Jeanne","Jed","Jedediah","Jedidiah","Jeff","Jefferey","Jeffery","Jeffrey","Jeffry","Jena","Jenifer","Jennie","Jennifer","Jennings","Jennyfer","Jensen","Jerad","Jerald","Jeramie","Jeramy","Jerel","Jeremie","Jeremy","Jermain","Jermaine","Jermey","Jerod","Jerome","Jeromy","Jerrell","Jerrod","Jerrold","Jerry","Jess","Jesse","Jessica","Jessie","Jessika","Jessy","Jessyca","Jesus","Jett","Jettie","Jevon","Jewel","Jewell","Jillian","Jimmie","Jimmy","Jo","Joan","Joana","Joanie","Joanne","Joannie","Joanny","Joany","Joaquin","Jocelyn","Jodie","Jody","Joe","Joel","Joelle","Joesph","Joey","Johan","Johann","Johanna","Johathan","John","Johnathan","Johnathon","Johnnie","Johnny","Johnpaul","Johnson","Jolie","Jon","Jonas","Jonatan","Jonathan","Jonathon","Jordan","Jordane","Jordi","Jordon","Jordy","Jordyn","Jorge","Jose","Josefa","Josefina","Joseph","Josephine","Josh","Joshua","Joshuah","Josiah","Josiane","Josianne","Josie","Josue","Jovan","Jovani","Jovanny","Jovany","Joy","Joyce","Juana","Juanita","Judah","Judd","Jude","Judge","Judson","Judy","Jules","Julia","Julian","Juliana","Julianne","Julie","Julien","Juliet","Julio","Julius","June","Junior","Junius","Justen","Justice","Justina","Justine","Juston","Justus","Justyn","Juvenal","Juwan","Kacey","Kaci","Kacie","Kade","Kaden","Kadin","Kaela","Kaelyn","Kaia","Kailee","Kailey","Kailyn","Kaitlin","Kaitlyn","Kale","Kaleb","Kaleigh","Kaley","Kali","Kallie","Kameron","Kamille","Kamren","Kamron","Kamryn","Kane","Kara","Kareem","Karelle","Karen","Kari","Kariane","Karianne","Karina","Karine","Karl","Karlee","Karley","Karli","Karlie","Karolann","Karson","Kasandra","Kasey","Kassandra","Katarina","Katelin","Katelyn","Katelynn","Katharina","Katherine","Katheryn","Kathleen","Kathlyn","Kathryn","Kathryne","Katlyn","Katlynn","Katrina","Katrine","Kattie","Kavon","Kay","Kaya","Kaycee","Kayden","Kayla","Kaylah","Kaylee","Kayleigh","Kayley","Kayli","Kaylie","Kaylin","Keagan","Keanu","Keara","Keaton","Keegan","Keeley","Keely","Keenan","Keira","Keith","Kellen","Kelley","Kelli","Kellie","Kelly","Kelsi","Kelsie","Kelton","Kelvin","Ken","Kendall","Kendra","Kendrick","Kenna","Kennedi","Kennedy","Kenneth","Kennith","Kenny","Kenton","Kenya","Kenyatta","Kenyon","Keon","Keshaun","Keshawn","Keven","Kevin","Kevon","Keyon","Keyshawn","Khalid","Khalil","Kian","Kiana","Kianna","Kiara","Kiarra","Kiel","Kiera","Kieran","Kiley","Kim","Kimberly","King","Kip","Kira","Kirk","Kirsten","Kirstin","Kitty","Kobe","Koby","Kody","Kolby","Kole","Korbin","Korey","Kory","Kraig","Kris","Krista","Kristian","Kristin","Kristina","Kristofer","Kristoffer","Kristopher","Kristy","Krystal","Krystel","Krystina","Kurt","Kurtis","Kyla","Kyle","Kylee","Kyleigh","Kyler","Kylie","Kyra","Lacey","Lacy","Ladarius","Lafayette","Laila","Laisha","Lamar","Lambert","Lamont","Lance","Landen","Lane","Laney","Larissa","Laron","Larry","Larue","Laura","Laurel","Lauren","Laurence","Lauretta","Lauriane","Laurianne","Laurie","Laurine","Laury","Lauryn","Lavada","Lavern","Laverna","Laverne","Lavina","Lavinia","Lavon","Lavonne","Lawrence","Lawson","Layla","Layne","Lazaro","Lea","Leann","Leanna","Leanne","Leatha","Leda","Lee","Leif","Leila","Leilani","Lela","Lelah","Leland","Lelia","Lempi","Lemuel","Lenna","Lennie","Lenny","Lenora","Lenore","Leo","Leola","Leon","Leonard","Leonardo","Leone","Leonel","Leonie","Leonor","Leonora","Leopold","Leopoldo","Leora","Lera","Lesley","Leslie","Lesly","Lessie","Lester","Leta","Letha","Letitia","Levi","Lew","Lewis","Lexi","Lexie","Lexus","Lia","Liam","Liana","Libbie","Libby","Lila","Lilian","Liliana","Liliane","Lilla","Lillian","Lilliana","Lillie","Lilly","Lily","Lilyan","Lina","Lincoln","Linda","Lindsay","Lindsey","Linnea","Linnie","Linwood","Lionel","Lisa","Lisandro","Lisette","Litzy","Liza","Lizeth","Lizzie","Llewellyn","Lloyd","Logan","Lois","Lola","Lolita","Loma","Lon","London","Lonie","Lonnie","Lonny","Lonzo","Lora","Loraine","Loren","Lorena","Lorenz","Lorenza","Lorenzo","Lori","Lorine","Lorna","Lottie","Lou","Louie","Louisa","Lourdes","Louvenia","Lowell","Loy","Loyal","Loyce","Lucas","Luciano","Lucie","Lucienne","Lucile","Lucinda","Lucio","Lucious","Lucius","Lucy","Ludie","Ludwig","Lue","Luella","Luigi","Luis","Luisa","Lukas","Lula","Lulu","Luna","Lupe","Lura","Lurline","Luther","Luz","Lyda","Lydia","Lyla","Lynn","Lyric","Lysanne","Mabel","Mabelle","Mable","Mac","Macey","Maci","Macie","Mack","Mackenzie","Macy","Madaline","Madalyn","Maddison","Madeline","Madelyn","Madelynn","Madge","Madie","Madilyn","Madisen","Madison","Madisyn","Madonna","Madyson","Mae","Maegan","Maeve","Mafalda","Magali","Magdalen","Magdalena","Maggie","Magnolia","Magnus","Maia","Maida","Maiya","Major","Makayla","Makenna","Makenzie","Malachi","Malcolm","Malika","Malinda","Mallie","Mallory","Malvina","Mandy","Manley","Manuel","Manuela","Mara","Marc","Marcel","Marcelina","Marcelino","Marcella","Marcelle","Marcellus","Marcelo","Marcia","Marco","Marcos","Marcus","Margaret","Margarete","Margarett","Margaretta","Margarette","Margarita","Marge","Margie","Margot","Margret","Marguerite","Maria","Mariah","Mariam","Marian","Mariana","Mariane","Marianna","Marianne","Mariano","Maribel","Marie","Mariela","Marielle","Marietta","Marilie","Marilou","Marilyne","Marina","Mario","Marion","Marisa","Marisol","Maritza","Marjolaine","Marjorie","Marjory","Mark","Markus","Marlee","Marlen","Marlene","Marley","Marlin","Marlon","Marques","Marquis","Marquise","Marshall","Marta","Martin","Martina","Martine","Marty","Marvin","Mary","Maryam","Maryjane","Maryse","Mason","Mateo","Mathew","Mathias","Mathilde","Matilda","Matilde","Matt","Matteo","Mattie","Maud","Maude","Maudie","Maureen","Maurice","Mauricio","Maurine","Maverick","Mavis","Max","Maxie","Maxime","Maximilian","Maximillia","Maximillian","Maximo","Maximus","Maxine","Maxwell","May","Maya","Maybell","Maybelle","Maye","Maymie","Maynard","Mayra","Mazie","Mckayla","Mckenna","Mckenzie","Meagan","Meaghan","Meda","Megane","Meggie","Meghan","Mekhi","Melany","Melba","Melisa","Melissa","Mellie","Melody","Melvin","Melvina","Melyna","Melyssa","Mercedes","Meredith","Merl","Merle","Merlin","Merritt","Mertie","Mervin","Meta","Mia","Micaela","Micah","Michael","Michaela","Michale","Micheal","Michel","Michele","Michelle","Miguel","Mikayla","Mike","Mikel","Milan","Miles","Milford","Miller","Millie","Milo","Milton","Mina","Minerva","Minnie","Miracle","Mireille","Mireya","Misael","Missouri","Misty","Mitchel","Mitchell","Mittie","Modesta","Modesto","Mohamed","Mohammad","Mohammed","Moises","Mollie","Molly","Mona","Monica","Monique","Monroe","Monserrat","Monserrate","Montana","Monte","Monty","Morgan","Moriah","Morris","Mortimer","Morton","Mose","Moses","Moshe","Mossie","Mozell","Mozelle","Muhammad","Muriel","Murl","Murphy","Murray","Mustafa","Mya","Myah","Mylene","Myles","Myra","Myriam","Myrl","Myrna","Myron","Myrtice","Myrtie","Myrtis","Myrtle","Nadia","Nakia","Name","Nannie","Naomi","Naomie","Napoleon","Narciso","Nash","Nasir","Nat","Natalia","Natalie","Natasha","Nathan","Nathanael","Nathanial","Nathaniel","Nathen","Nayeli","Neal","Ned","Nedra","Neha","Neil","Nelda","Nella","Nelle","Nellie","Nels","Nelson","Neoma","Nestor","Nettie","Neva","Newell","Newton","Nia","Nicholas","Nicholaus","Nichole","Nick","Nicklaus","Nickolas","Nico","Nicola","Nicolas","Nicole","Nicolette","Nigel","Nikita","Nikki","Nikko","Niko","Nikolas","Nils","Nina","Noah","Noble","Noe","Noel","Noelia","Noemi","Noemie","Noemy","Nola","Nolan","Nona","Nora","Norbert","Norberto","Norene","Norma","Norris","Norval","Norwood","Nova","Novella","Nya","Nyah","Nyasia","Obie","Oceane","Ocie","Octavia","Oda","Odell","Odessa","Odie","Ofelia","Okey","Ola","Olaf","Ole","Olen","Oleta","Olga","Olin","Oliver","Ollie","Oma","Omari","Omer","Ona","Onie","Opal","Ophelia","Ora","Oral","Oran","Oren","Orie","Orin","Orion","Orland","Orlando","Orlo","Orpha","Orrin","Orval","Orville","Osbaldo","Osborne","Oscar","Osvaldo","Oswald","Oswaldo","Otha","Otho","Otilia","Otis","Ottilie","Ottis","Otto","Ova","Owen","Ozella","Pablo","Paige","Palma","Pamela","Pansy","Paolo","Paris","Parker","Pascale","Pasquale","Pat","Patience","Patricia","Patrick","Patsy","Pattie","Paul","Paula","Pauline","Paxton","Payton","Pearl","Pearlie","Pearline","Pedro","Peggie","Penelope","Percival","Percy","Perry","Pete","Peter","Petra","Peyton","Philip","Phoebe","Phyllis","Pierce","Pierre","Pietro","Pink","Pinkie","Piper","Polly","Porter","Precious","Presley","Preston","Price","Prince","Princess","Priscilla","Providenci","Prudence","Queen","Queenie","Quentin","Quincy","Quinn","Quinten","Quinton","Rachael","Rachel","Rachelle","Rae","Raegan","Rafael","Rafaela","Raheem","Rahsaan","Rahul","Raina","Raleigh","Ralph","Ramiro","Ramon","Ramona","Randal","Randall","Randi","Randy","Ransom","Raoul","Raphael","Raphaelle","Raquel","Rashad","Rashawn","Rasheed","Raul","Raven","Ray","Raymond","Raymundo","Reagan","Reanna","Reba","Rebeca","Rebecca","Rebeka","Rebekah","Reece","Reed","Reese","Regan","Reggie","Reginald","Reid","Reilly","Reina","Reinhold","Remington","Rene","Renee","Ressie","Reta","Retha","Retta","Reuben","Reva","Rex","Rey","Reyes","Reymundo","Reyna","Reynold","Rhea","Rhett","Rhianna","Rhiannon","Rhoda","Ricardo","Richard","Richie","Richmond","Rick","Rickey","Rickie","Ricky","Rico","Rigoberto","Riley","Rita","River","Robb","Robbie","Robert","Roberta","Roberto","Robin","Robyn","Rocio","Rocky","Rod","Roderick","Rodger","Rodolfo","Rodrick","Rodrigo","Roel","Rogelio","Roger","Rogers","Rolando","Rollin","Roma","Romaine","Roman","Ron","Ronaldo","Ronny","Roosevelt","Rory","Rosa","Rosalee","Rosalia","Rosalind","Rosalinda","Rosalyn","Rosamond","Rosanna","Rosario","Roscoe","Rose","Rosella","Roselyn","Rosemarie","Rosemary","Rosendo","Rosetta","Rosie","Rosina","Roslyn","Ross","Rossie","Rowan","Rowena","Rowland","Roxane","Roxanne","Roy","Royal","Royce","Rozella","Ruben","Rubie","Ruby","Rubye","Rudolph","Rudy","Rupert","Russ","Russel","Russell","Rusty","Ruth","Ruthe","Ruthie","Ryan","Ryann","Ryder","Rylan","Rylee","Ryleigh","Ryley","Sabina","Sabrina","Sabryna","Sadie","Sadye","Sage","Saige","Sallie","Sally","Salma","Salvador","Salvatore","Sam","Samanta","Samantha","Samara","Samir","Sammie","Sammy","Samson","Sandra","Sandrine","Sandy","Sanford","Santa","Santiago","Santina","Santino","Santos","Sarah","Sarai","Sarina","Sasha","Saul","Savanah","Savanna","Savannah","Savion","Scarlett","Schuyler","Scot","Scottie","Scotty","Seamus","Sean","Sebastian","Sedrick","Selena","Selina","Selmer","Serena","Serenity","Seth","Shad","Shaina","Shakira","Shana","Shane","Shanel","Shanelle","Shania","Shanie","Shaniya","Shanna","Shannon","Shanny","Shanon","Shany","Sharon","Shaun","Shawn","Shawna","Shaylee","Shayna","Shayne","Shea","Sheila","Sheldon","Shemar","Sheridan","Sherman","Sherwood","Shirley","Shyann","Shyanne","Sibyl","Sid","Sidney","Sienna","Sierra","Sigmund","Sigrid","Sigurd","Silas","Sim","Simeon","Simone","Sincere","Sister","Skye","Skyla","Skylar","Sofia","Soledad","Solon","Sonia","Sonny","Sonya","Sophia","Sophie","Spencer","Stacey","Stacy","Stan","Stanford","Stanley","Stanton","Stefan","Stefanie","Stella","Stephan","Stephania","Stephanie","Stephany","Stephen","Stephon","Sterling","Steve","Stevie","Stewart","Stone","Stuart","Summer","Sunny","Susan","Susana","Susanna","Susie","Suzanne","Sven","Syble","Sydnee","Sydney","Sydni","Sydnie","Sylvan","Sylvester","Sylvia","Tabitha","Tad","Talia","Talon","Tamara","Tamia","Tania","Tanner","Tanya","Tara","Taryn","Tate","Tatum","Tatyana","Taurean","Tavares","Taya","Taylor","Teagan","Ted","Telly","Terence","Teresa","Terrance","Terrell","Terrence","Terrill","Terry","Tess","Tessie","Tevin","Thad","Thaddeus","Thalia","Thea","Thelma","Theo","Theodora","Theodore","Theresa","Therese","Theresia","Theron","Thomas","Thora","Thurman","Tia","Tiana","Tianna","Tiara","Tierra","Tiffany","Tillman","Timmothy","Timmy","Timothy","Tina","Tito","Titus","Tobin","Toby","Tod","Tom","Tomas","Tomasa","Tommie","Toney","Toni","Tony","Torey","Torrance","Torrey","Toy","Trace","Tracey","Tracy","Travis","Travon","Tre","Tremaine","Tremayne","Trent","Trenton","Tressa","Tressie","Treva","Trever","Trevion","Trevor","Trey","Trinity","Trisha","Tristian","Tristin","Triston","Troy","Trudie","Trycia","Trystan","Turner","Twila","Tyler","Tyra","Tyree","Tyreek","Tyrel","Tyrell","Tyrese","Tyrique","Tyshawn","Tyson","Ubaldo","Ulices","Ulises","Una","Unique","Urban","Uriah","Uriel","Ursula","Vada","Valentin","Valentina","Valentine","Valerie","Vallie","Van","Vance","Vanessa","Vaughn","Veda","Velda","Vella","Velma","Velva","Vena","Verda","Verdie","Vergie","Verla","Verlie","Vern","Verna","Verner","Vernice","Vernie","Vernon","Verona","Veronica","Vesta","Vicenta","Vicente","Vickie","Vicky","Victor","Victoria","Vida","Vidal","Vilma","Vince","Vincent","Vincenza","Vincenzo","Vinnie","Viola","Violet","Violette","Virgie","Virgil","Virginia","Virginie","Vita","Vito","Viva","Vivian","Viviane","Vivianne","Vivien","Vivienne","Vladimir","Wade","Waino","Waldo","Walker","Wallace","Walter","Walton","Wanda","Ward","Warren","Watson","Wava","Waylon","Wayne","Webster","Weldon","Wellington","Wendell","Wendy","Werner","Westley","Weston","Whitney","Wilber","Wilbert","Wilburn","Wiley","Wilford","Wilfred","Wilfredo","Wilfrid","Wilhelm","Wilhelmine","Will","Willa","Willard","William","Willie","Willis","Willow","Willy","Wilma","Wilmer","Wilson","Wilton","Winfield","Winifred","Winnifred","Winona","Winston","Woodrow","Wyatt","Wyman","Xander","Xavier","Xzavier","Yadira","Yasmeen","Yasmin","Yasmine","Yazmin","Yesenia","Yessenia","Yolanda","Yoshiko","Yvette","Yvonne","Zachariah","Zachary","Zachery","Zack","Zackary","Zackery","Zakary","Zander","Zane","Zaria","Zechariah","Zelda","Zella","Zelma","Zena","Zetta","Zion","Zita","Zoe","Zoey","Zoie","Zoila","Zola","Zora","Zul"];};
+exports.last_name = ["Abbott", "Abernathy", "Abshire", "Adams", "Altenwerth", "Anderson", "Ankunding", "Armstrong", "Auer", "Aufderhar", "Bahringer", "Bailey", "Balistreri", "Barrows", "Bartell", "Bartoletti", "Barton", "Bashirian", "Batz", "Bauch", "Baumbach", "Bayer", "Beahan", "Beatty", "Bechtelar", "Becker", "Bednar", "Beer", "Beier", "Berge", "Bergnaum", "Bergstrom", "Bernhard", "Bernier", "Bins", "Blanda", "Blick", "Block", "Bode", "Boehm", "Bogan", "Bogisich", "Borer", "Bosco", "Botsford", "Boyer", "Boyle", "Bradtke", "Brakus", "Braun", "Breitenberg", "Brekke", "Brown", "Bruen", "Buckridge", "Carroll", "Carter", "Cartwright", "Casper", "Cassin", "Champlin", "Christiansen", "Cole", "Collier", "Collins", "Conn", "Connelly", "Conroy", "Considine", "Corkery", "Cormier", "Corwin", "Cremin", "Crist", "Crona", "Cronin", "Crooks", "Cruickshank", "Cummerata", "Cummings", "Dach", "D'Amore", "Daniel", "Dare", "Daugherty", "Davis", "Deckow", "Denesik", "Dibbert", "Dickens", "Dicki", "Dickinson", "Dietrich", "Donnelly", "Dooley", "Douglas", "Doyle", "DuBuque", "Durgan", "Ebert", "Effertz", "Eichmann", "Emard", "Emmerich", "Erdman", "Ernser", "Fadel", "Fahey", "Farrell", "Fay", "Feeney", "Feest", "Feil", "Ferry", "Fisher", "Flatley", "Frami", "Franecki", "Friesen", "Fritsch", "Funk", "Gaylord", "Gerhold", "Gerlach", "Gibson", "Gislason", "Gleason", "Gleichner", "Glover", "Goldner", "Goodwin", "Gorczany", "Gottlieb", "Goyette", "Grady", "Graham", "Grant", "Green", "Greenfelder", "Greenholt", "Grimes", "Gulgowski", "Gusikowski", "Gutkowski", "Guªann", "Haag", "Hackett", "Hagenes", "Hahn", "Haley", "Halvorson", "Hamill", "Hammes", "Hand", "Hane", "Hansen", "Harber", "Harris", "Harªann", "Harvey", "Hauck", "Hayes", "Heaney", "Heathcote", "Hegmann", "Heidenreich", "Heller", "Herman", "Hermann", "Hermiston", "Herzog", "Hessel", "Hettinger", "Hickle", "Hilll", "Hills", "Hilpert", "Hintz", "Hirthe", "Hodkiewicz", "Hoeger", "Homenick", "Hoppe", "Howe", "Howell", "Hudson", "Huel", "Huels", "Hyatt", "Jacobi", "Jacobs", "Jacobson", "Jakubowski", "Jaskolski", "Jast", "Jenkins", "Jerde", "Jewess", "Johns", "Johnson", "Johnston", "Jones", "Kassulke", "Kautzer", "Keebler", "Keeling", "Kemmer", "Kerluke", "Kertzmann", "Kessler", "Kiehn", "Kihn", "Kilback", "King", "Kirlin", "Klein", "Kling", "Klocko", "Koch", "Koelpin", "Koepp", "Kohler", "Konopelski", "Koss", "Kovacek", "Kozey", "Krajcik", "Kreiger", "Kris", "Kshlerin", "Kub", "Kuhic", "Kuhlman", "Kuhn", "Kulas", "Kunde", "Kunze", "Kuphal", "Kutch", "Kuvalis", "Labadie", "Lakin", "Lang", "Langosh", "Langworth", "Larkin", "Larson", "Leannon", "Lebsack", "Ledner", "Leffler", "Legros", "Lehner", "Lemke", "Lesch", "Leuschke", "Lind", "Lindgren", "Littel", "Little", "Lockman", "Lowe", "Lubowitz", "Lueilwitz", "Luettgen", "Lynch", "Macejkovic", "Maggio", "Mann", "Mante", "Marks", "Marquardt", "Marvin", "Mayer", "Mayert", "McClure", "McCullough", "McDermott", "McGlynn", "McKenzie", "McLaughlin", "Medhurst", "Mertz", "Metz", "Miller", "Mills", "Mitchell", "Moen", "Mohr", "Monahan", "Moore", "Morar", "Morissette", "Mosciski", "Mraz", "Mueller", "Muller", "Murazik", "Murphy", "Murray", "Nader", "Nicolas", "Nienow", "Nikolaus", "Nitzsche", "Nolan", "Oberbrunner", "O'Connell", "O'Conner", "O'Hara", "O'Keefe", "O'Kon", "Okuneva", "Olson", "Ondricka", "O'Reilly", "Orn", "Ortiz", "Osinski", "Pacocha", "Padberg", "Pagac", "Parisian", "Parker", "Paucek", "Pfannerstill", "Pfeffer", "Pollich", "Pouros", "Powlowski", "Predovic", "Price", "Prohaska", "Prosacco", "Purdy", "Quigley", "Quitzon", "Rath", "Ratke", "Rau", "Raynor", "Reichel", "Reichert", "Reilly", "Reinger", "Rempel", "Renner", "Reynolds", "Rice", "Rippin", "Ritchie", "Robel", "Roberts", "Rodriguez", "Rogahn", "Rohan", "Rolfson", "Romaguera", "Roob", "Rosenbaum", "Rowe", "Ruecker", "Runolfsdottir", "Runolfsson", "Runte", "Russel", "Rutherford", "Ryan", "Sanford", "Satterfield", "Sauer", "Sawayn", "Schaden", "Schaefer", "Schamberger", "Schiller", "Schimmel", "Schinner", "Schmeler", "Schmidt", "Schmitt", "Schneider", "Schoen", "Schowalter", "Schroeder", "Schulist", "Schultz", "Schumm", "Schuppe", "Schuster", "Senger", "Shanahan", "Shields", "Simonis", "Sipes", "Skiles", "Smith", "Smitham", "Spencer", "Spinka", "Sporer", "Stamm", "Stanton", "Stark", "Stehr", "Steuber", "Stiedemann", "Stokes", "Stoltenberg", "Stracke", "Streich", "Stroman", "Strosin", "Swaniawski", "Swift", "Terry", "Thiel", "Thompson", "Tillman", "Torp", "Torphy", "Towne", "Toy", "Trantow", "Tremblay", "Treutel", "Tromp", "Turcotte", "Turner", "Ullrich", "Upton", "Vandervort", "Veum", "Volkman", "Von", "VonRueden", "Waelchi", "Walker", "Walsh", "Walter", "Ward", "Waters", "Watsica", "Weber", "Wehner", "Weimann", "Weissnat", "Welch", "West", "White", "Wiegand", "Wilderman", "Wilkinson", "Will", "Williamson", "Willms", "Windler", "Wintheiser", "Wisoky", "Wisozk", "Witting", "Wiza", "Wolf", "Wolff", "Wuckert", "Wunsch", "Wyman", "Yost", "Yundt", "Zboncak", "Zemlak", "Ziemann", "Zieme", "Zulauf"];
+exports.name_prefix = ["Mr.", "Mrs.", "Ms.", "Miss", "Dr."];
-exports.last_name = function(){return["Abbott","Abernathy","Abshire","Adams","Altenwerth","Anderson","Ankunding","Armstrong","Auer","Aufderhar","Bahringer","Bailey","Balistreri","Barrows","Bartell","Bartoletti","Barton","Bashirian","Batz","Bauch","Baumbach","Bayer","Beahan","Beatty","Bechtelar","Becker","Bednar","Beer","Beier","Berge","Bergnaum","Bergstrom","Bernhard","Bernier","Bins","Blanda","Blick","Block","Bode","Boehm","Bogan","Bogisich","Borer","Bosco","Botsford","Boyer","Boyle","Bradtke","Brakus","Braun","Breitenberg","Brekke","Brown","Bruen","Buckridge","Carroll","Carter","Cartwright","Casper","Cassin","Champlin","Christiansen","Cole","Collier","Collins","Conn","Connelly","Conroy","Considine","Corkery","Cormier","Corwin","Cremin","Crist","Crona","Cronin","Crooks","Cruickshank","Cummerata","Cummings","Dach","D'Amore","Daniel","Dare","Daugherty","Davis","Deckow","Denesik","Dibbert","Dickens","Dicki","Dickinson","Dietrich","Donnelly","Dooley","Douglas","Doyle","DuBuque","Durgan","Ebert","Effertz","Eichmann","Emard","Emmerich","Erdman","Ernser","Fadel","Fahey","Farrell","Fay","Feeney","Feest","Feil","Ferry","Fisher","Flatley","Frami","Franecki","Friesen","Fritsch","Funk","Gaylord","Gerhold","Gerlach","Gibson","Gislason","Gleason","Gleichner","Glover","Goldner","Goodwin","Gorczany","Gottlieb","Goyette","Grady","Graham","Grant","Green","Greenfelder","Greenholt","Grimes","Gulgowski","Gusikowski","Gutkowski","Guªann","Haag","Hackett","Hagenes","Hahn","Haley","Halvorson","Hamill","Hammes","Hand","Hane","Hansen","Harber","Harris","Harªann","Harvey","Hauck","Hayes","Heaney","Heathcote","Hegmann","Heidenreich","Heller","Herman","Hermann","Hermiston","Herzog","Hessel","Hettinger","Hickle","Hilll","Hills","Hilpert","Hintz","Hirthe","Hodkiewicz","Hoeger","Homenick","Hoppe","Howe","Howell","Hudson","Huel","Huels","Hyatt","Jacobi","Jacobs","Jacobson","Jakubowski","Jaskolski","Jast","Jenkins","Jerde","Jewess","Johns","Johnson","Johnston","Jones","Kassulke","Kautzer","Keebler","Keeling","Kemmer","Kerluke","Kertzmann","Kessler","Kiehn","Kihn","Kilback","King","Kirlin","Klein","Kling","Klocko","Koch","Koelpin","Koepp","Kohler","Konopelski","Koss","Kovacek","Kozey","Krajcik","Kreiger","Kris","Kshlerin","Kub","Kuhic","Kuhlman","Kuhn","Kulas","Kunde","Kunze","Kuphal","Kutch","Kuvalis","Labadie","Lakin","Lang","Langosh","Langworth","Larkin","Larson","Leannon","Lebsack","Ledner","Leffler","Legros","Lehner","Lemke","Lesch","Leuschke","Lind","Lindgren","Littel","Little","Lockman","Lowe","Lubowitz","Lueilwitz","Luettgen","Lynch","Macejkovic","Maggio","Mann","Mante","Marks","Marquardt","Marvin","Mayer","Mayert","McClure","McCullough","McDermott","McGlynn","McKenzie","McLaughlin","Medhurst","Mertz","Metz","Miller","Mills","Mitchell","Moen","Mohr","Monahan","Moore","Morar","Morissette","Mosciski","Mraz","Mueller","Muller","Murazik","Murphy","Murray","Nader","Nicolas","Nienow","Nikolaus","Nitzsche","Nolan","Oberbrunner","O'Connell","O'Conner","O'Hara","O'Keefe","O'Kon","Okuneva","Olson","Ondricka","O'Reilly","Orn","Ortiz","Osinski","Pacocha","Padberg","Pagac","Parisian","Parker","Paucek","Pfannerstill","Pfeffer","Pollich","Pouros","Powlowski","Predovic","Price","Prohaska","Prosacco","Purdy","Quigley","Quitzon","Rath","Ratke","Rau","Raynor","Reichel","Reichert","Reilly","Reinger","Rempel","Renner","Reynolds","Rice","Rippin","Ritchie","Robel","Roberts","Rodriguez","Rogahn","Rohan","Rolfson","Romaguera","Roob","Rosenbaum","Rowe","Ruecker","Runolfsdottir","Runolfsson","Runte","Russel","Rutherford","Ryan","Sanford","Satterfield","Sauer","Sawayn","Schaden","Schaefer","Schamberger","Schiller","Schimmel","Schinner","Schmeler","Schmidt","Schmitt","Schneider","Schoen","Schowalter","Schroeder","Schulist","Schultz","Schumm","Schuppe","Schuster","Senger","Shanahan","Shields","Simonis","Sipes","Skiles","Smith","Smitham","Spencer","Spinka","Sporer","Stamm","Stanton","Stark","Stehr","Steuber","Stiedemann","Stokes","Stoltenberg","Stracke","Streich","Stroman","Strosin","Swaniawski","Swift","Terry","Thiel","Thompson","Tillman","Torp","Torphy","Towne","Toy","Trantow","Tremblay","Treutel","Tromp","Turcotte","Turner","Ullrich","Upton","Vandervort","Veum","Volkman","Von","VonRueden","Waelchi","Walker","Walsh","Walter","Ward","Waters","Watsica","Weber","Wehner","Weimann","Weissnat","Welch","West","White","Wiegand","Wilderman","Wilkinson","Will","Williamson","Willms","Windler","Wintheiser","Wisoky","Wisozk","Witting","Wiza","Wolf","Wolff","Wuckert","Wunsch","Wyman","Yost","Yundt","Zboncak","Zemlak","Ziemann","Zieme","Zulauf"];}
-
-exports.name_prefix = function(){return ["Mr.", "Mrs.", "Ms.", "Miss", "Dr."];};
-
-exports.name_suffix = function(){return ["Jr.", "Sr.", "I", "II", "III", "IV", "V", "MD", "DDS", "PhD", "DVM"];};
+exports.name_suffix = ["Jr.", "Sr.", "I", "II", "III", "IV", "V", "MD", "DDS", "PhD", "DVM"];
// address.js definitions
-exports.br_state = function () {
- return [
- 'Acre',
- 'Alagoas',
- 'Amapá',
- 'Amazonas',
- 'Bahia',
- 'Ceará',
- 'Distrito Federal',
- 'Espírito Santo',
- 'Goiás',
- 'Maranhão',
- 'Mato Grosso',
- 'Mato Grosso do Sul',
- 'Minas Gerais',
- 'Paraná',
- 'Paraíba',
- 'Pará',
- 'Pernambuco',
- 'Piauí',
- 'Rio de Janeiro',
- 'Rio Grande do Norte',
- 'Rio Grande do Sul',
- 'Rondônia',
- 'Roraima',
- 'Santa Catarina',
- 'Sergipe',
- 'São Paulo',
- 'Tocantins'
- ];
-};
-
-exports.br_state_abbr = function () {
- return [
- 'AC',
- 'AL',
- 'AP',
- 'AM',
- 'BA',
- 'CE',
- 'DF',
- 'ES',
- 'GO',
- 'MA',
- 'MT',
- 'MS',
- 'MG',
- 'PR',
- 'PB',
- 'PA',
- 'PE',
- 'PI',
- 'RJ',
- 'RN',
- 'RS',
- 'RO',
- 'RR',
- 'SC',
- 'SE',
- 'SP',
- 'TO'
- ];
-};
-
-exports.us_state = function(){return ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'];};
-
-exports.us_state_abbr = function(){return ["AL", "AK", "AS", "AZ", "AR", "CA", "CO", 'CT', "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY", "AE", "AA", "AP"];};
-
-exports.city_prefix = function(){return ["North", "East", "West", "South", "New", "Lake", "Port"];};
-
-exports.city_suffix = function(){return ["town", "ton", "land", "ville", "berg", "burgh", "borough", "bury", "view", "port", "mouth", "stad", "furt", "chester", "mouth", "fort", "haven", "side", "shire"];};
-
-exports.street_suffix = function(){return ["Alley","Avenue","Branch","Bridge","Brook","Brooks","Burg","Burgs","Bypass","Camp","Canyon","Cape","Causeway","Center","Centers","Circle","Circles","Cliff","Cliffs","Club","Common","Corner","Corners","Course","Court","Courts","Cove","Coves","Creek","Crescent","Crest","Crossing","Crossroad","Curve","Dale","Dam","Divide","Drive","Drive","Drives","Estate","Estates","Expressway","Extension","Extensions","Fall","Falls","Ferry","Field","Fields","Flat","Flats","Ford","Fords","Forest","Forge","Forges","Fork","Forks","Fort","Freeway","Garden","Gardens","Gateway","Glen","Glens","Green","Greens","Grove","Groves","Harbor","Harbors","Haven","Heights","Highway","Hill","Hills","Hollow","Inlet","Inlet","Island","Island","Islands","Islands","Isle","Isle","Junction","Junctions","Key","Keys","Knoll","Knolls","Lake","Lakes","Land","Landing","Lane","Light","Lights","Loaf","Lock","Locks","Locks","Lodge","Lodge","Loop","Mall","Manor","Manors","Meadow","Meadows","Mews","Mill","Mills","Mission","Mission","Motorway","Mount","Mountain","Mountain","Mountains","Mountains","Neck","Orchard","Oval","Overpass","Park","Parks","Parkway","Parkways","Pass","Passage","Path","Pike","Pine","Pines","Place","Plain","Plains","Plains","Plaza","Plaza","Point","Points","Port","Port","Ports","Ports","Prairie","Prairie","Radial","Ramp","Ranch","Rapid","Rapids","Rest","Ridge","Ridges","River","Road","Road","Roads","Roads","Route","Row","Rue","Run","Shoal","Shoals","Shore","Shores","Skyway","Spring","Springs","Springs","Spur","Spurs","Square","Square","Squares","Squares","Station","Station","Stravenue","Stravenue","Stream","Stream","Street","Street","Streets","Summit","Summit","Terrace","Throughway","Trace","Track","Trafficway","Trail","Trail","Tunnel","Tunnel","Turnpike","Turnpike","Underpass","Union","Unions","Valley","Valleys","Via","Viaduct","View","Views","Village","Village","","Villages","Ville","Vista","Vista","Walk","Walks","Wall","Way","Ways","Well","Wells"];};
-
-exports.uk_county = function(){return ['Avon', 'Bedfordshire', 'Berkshire', 'Borders', 'Buckinghamshire', 'Cambridgeshire', 'Central', 'Cheshire', 'Cleveland', 'Clwyd', 'Cornwall', 'County Antrim', 'County Armagh', 'County Down', 'County Fermanagh', 'County Londonderry', 'County Tyrone', 'Cumbria', 'Derbyshire', 'Devon', 'Dorset', 'Dumfries and Galloway', 'Durham', 'Dyfed', 'East Sussex', 'Essex', 'Fife', 'Gloucestershire', 'Grampian', 'Greater Manchester', 'Gwent', 'Gwynedd County', 'Hampshire', 'Herefordshire', 'Hertfordshire', 'Highlands and Islands', 'Humberside', 'Isle of Wight', 'Kent', 'Lancashire', 'Leicestershire', 'Lincolnshire', 'Lothian', 'Merseyside', 'Mid Glamorgan', 'Norfolk', 'North Yorkshire', 'Northamptonshire', 'Northumberland', 'Nottinghamshire', 'Oxfordshire', 'Powys', 'Rutland', 'Shropshire', 'Somerset', 'South Glamorgan', 'South Yorkshire', 'Staffordshire', 'Strathclyde', 'Suffolk', 'Surrey', 'Tayside', 'Tyne and Wear', 'Warwickshire', 'West Glamorgan', 'West Midlands', 'West Sussex', 'West Yorkshire', 'Wiltshire', 'Worcestershire'];};
-
-exports.uk_country = function(){return ['England', 'Scotland', 'Wales', 'Northern Ireland'];};
+exports.br_state = [
+ 'Acre',
+ 'Alagoas',
+ 'Amapá',
+ 'Amazonas',
+ 'Bahia',
+ 'Ceará',
+ 'Distrito Federal',
+ 'Espírito Santo',
+ 'Goiás',
+ 'Maranhão',
+ 'Mato Grosso',
+ 'Mato Grosso do Sul',
+ 'Minas Gerais',
+ 'Paraná',
+ 'Paraíba',
+ 'Pará',
+ 'Pernambuco',
+ 'Piauí',
+ 'Rio de Janeiro',
+ 'Rio Grande do Norte',
+ 'Rio Grande do Sul',
+ 'Rondônia',
+ 'Roraima',
+ 'Santa Catarina',
+ 'Sergipe',
+ 'São Paulo',
+ 'Tocantins'
+];
+
+exports.br_state_abbr = [
+ 'AC',
+ 'AL',
+ 'AP',
+ 'AM',
+ 'BA',
+ 'CE',
+ 'DF',
+ 'ES',
+ 'GO',
+ 'MA',
+ 'MT',
+ 'MS',
+ 'MG',
+ 'PR',
+ 'PB',
+ 'PA',
+ 'PE',
+ 'PI',
+ 'RJ',
+ 'RN',
+ 'RS',
+ 'RO',
+ 'RR',
+ 'SC',
+ 'SE',
+ 'SP',
+ 'TO'
+];
+
+exports.us_state = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'];
+
+exports.us_state_abbr = ["AL", "AK", "AS", "AZ", "AR", "CA", "CO", 'CT', "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY", "AE", "AA", "AP"];
+
+exports.city_prefix = ["North", "East", "West", "South", "New", "Lake", "Port"];
+
+exports.city_suffix = ["town", "ton", "land", "ville", "berg", "burgh", "borough", "bury", "view", "port", "mouth", "stad", "furt", "chester", "mouth", "fort", "haven", "side", "shire"];
+
+exports.street_suffix = ["Alley", "Avenue", "Branch", "Bridge", "Brook", "Brooks", "Burg", "Burgs", "Bypass", "Camp", "Canyon", "Cape", "Causeway", "Center", "Centers", "Circle", "Circles", "Cliff", "Cliffs", "Club", "Common", "Corner", "Corners", "Course", "Court", "Courts", "Cove", "Coves", "Creek", "Crescent", "Crest", "Crossing", "Crossroad", "Curve", "Dale", "Dam", "Divide", "Drive", "Drive", "Drives", "Estate", "Estates", "Expressway", "Extension", "Extensions", "Fall", "Falls", "Ferry", "Field", "Fields", "Flat", "Flats", "Ford", "Fords", "Forest", "Forge", "Forges", "Fork", "Forks", "Fort", "Freeway", "Garden", "Gardens", "Gateway", "Glen", "Glens", "Green", "Greens", "Grove", "Groves", "Harbor", "Harbors", "Haven", "Heights", "Highway", "Hill", "Hills", "Hollow", "Inlet", "Inlet", "Island", "Island", "Islands", "Islands", "Isle", "Isle", "Junction", "Junctions", "Key", "Keys", "Knoll", "Knolls", "Lake", "Lakes", "Land", "Landing", "Lane", "Light", "Lights", "Loaf", "Lock", "Locks", "Locks", "Lodge", "Lodge", "Loop", "Mall", "Manor", "Manors", "Meadow", "Meadows", "Mews", "Mill", "Mills", "Mission", "Mission", "Motorway", "Mount", "Mountain", "Mountain", "Mountains", "Mountains", "Neck", "Orchard", "Oval", "Overpass", "Park", "Parks", "Parkway", "Parkways", "Pass", "Passage", "Path", "Pike", "Pine", "Pines", "Place", "Plain", "Plains", "Plains", "Plaza", "Plaza", "Point", "Points", "Port", "Port", "Ports", "Ports", "Prairie", "Prairie", "Radial", "Ramp", "Ranch", "Rapid", "Rapids", "Rest", "Ridge", "Ridges", "River", "Road", "Road", "Roads", "Roads", "Route", "Row", "Rue", "Run", "Shoal", "Shoals", "Shore", "Shores", "Skyway", "Spring", "Springs", "Springs", "Spur", "Spurs", "Square", "Square", "Squares", "Squares", "Station", "Station", "Stravenue", "Stravenue", "Stream", "Stream", "Street", "Street", "Streets", "Summit", "Summit", "Terrace", "Throughway", "Trace", "Track", "Trafficway", "Trail", "Trail", "Tunnel", "Tunnel", "Turnpike", "Turnpike", "Underpass", "Union", "Unions", "Valley", "Valleys", "Via", "Viaduct", "View", "Views", "Village", "Village", "", "Villages", "Ville", "Vista", "Vista", "Walk", "Walks", "Wall", "Way", "Ways", "Well", "Wells"];
+
+exports.uk_county = ['Avon', 'Bedfordshire', 'Berkshire', 'Borders', 'Buckinghamshire', 'Cambridgeshire', 'Central', 'Cheshire', 'Cleveland', 'Clwyd', 'Cornwall', 'County Antrim', 'County Armagh', 'County Down', 'County Fermanagh', 'County Londonderry', 'County Tyrone', 'Cumbria', 'Derbyshire', 'Devon', 'Dorset', 'Dumfries and Galloway', 'Durham', 'Dyfed', 'East Sussex', 'Essex', 'Fife', 'Gloucestershire', 'Grampian', 'Greater Manchester', 'Gwent', 'Gwynedd County', 'Hampshire', 'Herefordshire', 'Hertfordshire', 'Highlands and Islands', 'Humberside', 'Isle of Wight', 'Kent', 'Lancashire', 'Leicestershire', 'Lincolnshire', 'Lothian', 'Merseyside', 'Mid Glamorgan', 'Norfolk', 'North Yorkshire', 'Northamptonshire', 'Northumberland', 'Nottinghamshire', 'Oxfordshire', 'Powys', 'Rutland', 'Shropshire', 'Somerset', 'South Glamorgan', 'South Yorkshire', 'Staffordshire', 'Strathclyde', 'Suffolk', 'Surrey', 'Tayside', 'Tyne and Wear', 'Warwickshire', 'West Glamorgan', 'West Midlands', 'West Sussex', 'West Yorkshire', 'Wiltshire', 'Worcestershire'];
+
+exports.uk_country = ['England', 'Scotland', 'Wales', 'Northern Ireland'];
// internet.js definitions
-exports.catch_phrase_adjective = function(){return ["Adaptive", "Advanced", "Ameliorated", "Assimilated", "Automated", "Balanced", "Business-focused", "Centralized", "Cloned", "Compatible", "Configurable", "Cross-group", "Cross-platform", "Customer-focused", "Customizable", "Decentralized", "De-engineered", "Devolved", "Digitized", "Distributed", "Diverse", "Down-sized", "Enhanced", "Enterprise-wide", "Ergonomic", "Exclusive", "Expanded", "Extended", "Face to face", "Focused", "Front-line", "Fully-configurable", "Function-based", "Fundamental", "Future-proofed", "Grass-roots", "Horizontal", "Implemented", "Innovative", "Integrated", "Intuitive", "Inverse", "Managed", "Mandatory", "Monitored", "Multi-channelled", "Multi-lateral", "Multi-layered", "Multi-tiered", "Networked", "Object-based", "Open-architected", "Open-source", "Operative", "Optimized", "Optional", "Organic", "Organized", "Persevering", "Persistent", "Phased", "Polarised", "Pre-emptive", "Proactive", "Profit-focused", "Profound", "Programmable", "Progressive", "Public-key", "Quality-focused", "Reactive", "Realigned", "Re-contextualized", "Re-engineered", "Reduced", "Reverse-engineered", "Right-sized", "Robust", "Seamless", "Secured", "Self-enabling", "Sharable", "Stand-alone", "Streamlined", "Switchable", "Synchronised", "Synergistic", "Synergized", "Team-oriented", "Total", "Triple-buffered", "Universal", "Up-sized", "Upgradable", "User-centric", "User-friendly", "Versatile", "Virtual", "Visionary", "Vision-oriented"];};
+exports.catch_phrase_adjective = ["Adaptive", "Advanced", "Ameliorated", "Assimilated", "Automated", "Balanced", "Business-focused", "Centralized", "Cloned", "Compatible", "Configurable", "Cross-group", "Cross-platform", "Customer-focused", "Customizable", "Decentralized", "De-engineered", "Devolved", "Digitized", "Distributed", "Diverse", "Down-sized", "Enhanced", "Enterprise-wide", "Ergonomic", "Exclusive", "Expanded", "Extended", "Face to face", "Focused", "Front-line", "Fully-configurable", "Function-based", "Fundamental", "Future-proofed", "Grass-roots", "Horizontal", "Implemented", "Innovative", "Integrated", "Intuitive", "Inverse", "Managed", "Mandatory", "Monitored", "Multi-channelled", "Multi-lateral", "Multi-layered", "Multi-tiered", "Networked", "Object-based", "Open-architected", "Open-source", "Operative", "Optimized", "Optional", "Organic", "Organized", "Persevering", "Persistent", "Phased", "Polarised", "Pre-emptive", "Proactive", "Profit-focused", "Profound", "Programmable", "Progressive", "Public-key", "Quality-focused", "Reactive", "Realigned", "Re-contextualized", "Re-engineered", "Reduced", "Reverse-engineered", "Right-sized", "Robust", "Seamless", "Secured", "Self-enabling", "Sharable", "Stand-alone", "Streamlined", "Switchable", "Synchronised", "Synergistic", "Synergized", "Team-oriented", "Total", "Triple-buffered", "Universal", "Up-sized", "Upgradable", "User-centric", "User-friendly", "Versatile", "Virtual", "Visionary", "Vision-oriented"];
-exports.catch_phrase_descriptor = function(){return ["24 hour", "24/7", "3rd generation", "4th generation", "5th generation", "6th generation", "actuating", "analyzing", "assymetric", "asynchronous", "attitude-oriented", "background", "bandwidth-monitored", "bi-directional", "bifurcated", "bottom-line", "clear-thinking", "client-driven", "client-server", "coherent", "cohesive", "composite", "context-sensitive", "contextually-based", "content-based", "dedicated", "demand-driven", "didactic", "directional", "discrete", "disintermediate", "dynamic", "eco-centric", "empowering", "encompassing", "even-keeled", "executive", "explicit", "exuding", "fault-tolerant", "foreground", "fresh-thinking", "full-range", "global", "grid-enabled", "heuristic", "high-level", "holistic", "homogeneous", "human-resource", "hybrid", "impactful", "incremental", "intangible", "interactive", "intermediate", "leading edge", "local", "logistical", "maximized", "methodical", "mission-critical", "mobile", "modular", "motivating", "multimedia", "multi-state", "multi-tasking", "national", "needs-based", "neutral", "next generation", "non-volatile", "object-oriented", "optimal", "optimizing", "radical", "real-time", "reciprocal", "regional", "responsive", "scalable", "secondary", "solution-oriented", "stable", "static", "systematic", "systemic", "system-worthy", "tangible", "tertiary", "transitional", "uniform", "upward-trending", "user-facing", "value-added", "web-enabled", "well-modulated", "zero administration", "zero defect", "zero tolerance"];};
+exports.catch_phrase_descriptor = ["24 hour", "24/7", "3rd generation", "4th generation", "5th generation", "6th generation", "actuating", "analyzing", "assymetric", "asynchronous", "attitude-oriented", "background", "bandwidth-monitored", "bi-directional", "bifurcated", "bottom-line", "clear-thinking", "client-driven", "client-server", "coherent", "cohesive", "composite", "context-sensitive", "contextually-based", "content-based", "dedicated", "demand-driven", "didactic", "directional", "discrete", "disintermediate", "dynamic", "eco-centric", "empowering", "encompassing", "even-keeled", "executive", "explicit", "exuding", "fault-tolerant", "foreground", "fresh-thinking", "full-range", "global", "grid-enabled", "heuristic", "high-level", "holistic", "homogeneous", "human-resource", "hybrid", "impactful", "incremental", "intangible", "interactive", "intermediate", "leading edge", "local", "logistical", "maximized", "methodical", "mission-critical", "mobile", "modular", "motivating", "multimedia", "multi-state", "multi-tasking", "national", "needs-based", "neutral", "next generation", "non-volatile", "object-oriented", "optimal", "optimizing", "radical", "real-time", "reciprocal", "regional", "responsive", "scalable", "secondary", "solution-oriented", "stable", "static", "systematic", "systemic", "system-worthy", "tangible", "tertiary", "transitional", "uniform", "upward-trending", "user-facing", "value-added", "web-enabled", "well-modulated", "zero administration", "zero defect", "zero tolerance"];
-exports.catch_phrase_noun = function(){return ["ability", "access", "adapter", "algorithm", "alliance", "analyzer", "application", "approach", "architecture", "archive", "artificial intelligence", "array", "attitude", "benchmark", "budgetary management", "capability", "capacity", "challenge", "circuit", "collaboration", "complexity", "concept", "conglomeration", "contingency", "core", "customer loyalty", "database", "data-warehouse", "definition", "emulation", "encoding", "encryption", "extranet", "firmware", "flexibility", "focus group", "forecast", "frame", "framework", "function", "functionalities", "Graphic Interface", "groupware", "Graphical User Interface", "hardware", "help-desk", "hierarchy", "hub", "implementation", "info-mediaries", "infrastructure", "initiative", "installation", "instruction set", "interface", "internet solution", "intranet", "knowledge user", "knowledge base", "local area network", "leverage", "matrices", "matrix", "methodology", "middleware", "migration", "model", "moderator", "monitoring", "moratorium", "neural-net", "open architecture", "open system", "orchestration", "paradigm", "parallelism", "policy", "portal", "pricing structure", "process improvement", "product", "productivity", "project", "projection", "protocol", "secured line", "service-desk", "software", "solution", "standardization", "strategy", "structure", "success", "superstructure", "support", "synergy", "system engine", "task-force", "throughput", "time-frame", "toolset", "utilisation", "website", "workforce"];};
+exports.catch_phrase_noun = ["ability", "access", "adapter", "algorithm", "alliance", "analyzer", "application", "approach", "architecture", "archive", "artificial intelligence", "array", "attitude", "benchmark", "budgetary management", "capability", "capacity", "challenge", "circuit", "collaboration", "complexity", "concept", "conglomeration", "contingency", "core", "customer loyalty", "database", "data-warehouse", "definition", "emulation", "encoding", "encryption", "extranet", "firmware", "flexibility", "focus group", "forecast", "frame", "framework", "function", "functionalities", "Graphic Interface", "groupware", "Graphical User Interface", "hardware", "help-desk", "hierarchy", "hub", "implementation", "info-mediaries", "infrastructure", "initiative", "installation", "instruction set", "interface", "internet solution", "intranet", "knowledge user", "knowledge base", "local area network", "leverage", "matrices", "matrix", "methodology", "middleware", "migration", "model", "moderator", "monitoring", "moratorium", "neural-net", "open architecture", "open system", "orchestration", "paradigm", "parallelism", "policy", "portal", "pricing structure", "process improvement", "product", "productivity", "project", "projection", "protocol", "secured line", "service-desk", "software", "solution", "standardization", "strategy", "structure", "success", "superstructure", "support", "synergy", "system engine", "task-force", "throughput", "time-frame", "toolset", "utilisation", "website", "workforce"];
-exports.bs_adjective = function(){return ["implement", "utilize", "integrate", "streamline", "optimize", "evolve", "transform", "embrace", "enable", "orchestrate", "leverage", "reinvent", "aggregate", "architect", "enhance", "incentivize", "morph", "empower", "envisioneer", "monetize", "harness", "facilitate", "seize", "disintermediate", "synergize", "strategize", "deploy", "brand", "grow", "target", "syndicate", "synthesize", "deliver", "mesh", "incubate", "engage", "maximize", "benchmark", "expedite", "reintermediate", "whiteboard", "visualize", "repurpose", "innovate", "scale", "unleash", "drive", "extend", "engineer", "revolutionize", "generate", "exploit", "transition", "e-enable", "iterate", "cultivate", "matrix", "productize", "redefine", "recontextualize"];};
+exports.bs_adjective = ["implement", "utilize", "integrate", "streamline", "optimize", "evolve", "transform", "embrace", "enable", "orchestrate", "leverage", "reinvent", "aggregate", "architect", "enhance", "incentivize", "morph", "empower", "envisioneer", "monetize", "harness", "facilitate", "seize", "disintermediate", "synergize", "strategize", "deploy", "brand", "grow", "target", "syndicate", "synthesize", "deliver", "mesh", "incubate", "engage", "maximize", "benchmark", "expedite", "reintermediate", "whiteboard", "visualize", "repurpose", "innovate", "scale", "unleash", "drive", "extend", "engineer", "revolutionize", "generate", "exploit", "transition", "e-enable", "iterate", "cultivate", "matrix", "productize", "redefine", "recontextualize"];
-exports.bs_buzz = function(){return ["clicks-and-mortar", "value-added", "vertical", "proactive", "robust", "revolutionary", "scalable", "leading-edge", "innovative", "intuitive", "strategic", "e-business", "mission-critical", "sticky", "one-to-one", "24/7", "end-to-end", "global", "B2B", "B2C", "granular", "frictionless", "virtual", "viral", "dynamic", "24/365", "best-of-breed", "killer", "magnetic", "bleeding-edge", "web-enabled", "interactive", "dot-com", "sexy", "back-end", "real-time", "efficient", "front-end", "distributed", "seamless", "extensible", "turn-key", "world-class", "open-source", "cross-platform", "cross-media", "synergistic", "bricks-and-clicks", "out-of-the-box", "enterprise", "integrated", "impactful", "wireless", "transparent", "next-generation", "cutting-edge", "user-centric", "visionary", "customized", "ubiquitous", "plug-and-play", "collaborative", "compelling", "holistic", "rich"];};
+exports.bs_buzz = ["clicks-and-mortar", "value-added", "vertical", "proactive", "robust", "revolutionary", "scalable", "leading-edge", "innovative", "intuitive", "strategic", "e-business", "mission-critical", "sticky", "one-to-one", "24/7", "end-to-end", "global", "B2B", "B2C", "granular", "frictionless", "virtual", "viral", "dynamic", "24/365", "best-of-breed", "killer", "magnetic", "bleeding-edge", "web-enabled", "interactive", "dot-com", "sexy", "back-end", "real-time", "efficient", "front-end", "distributed", "seamless", "extensible", "turn-key", "world-class", "open-source", "cross-platform", "cross-media", "synergistic", "bricks-and-clicks", "out-of-the-box", "enterprise", "integrated", "impactful", "wireless", "transparent", "next-generation", "cutting-edge", "user-centric", "visionary", "customized", "ubiquitous", "plug-and-play", "collaborative", "compelling", "holistic", "rich"];
-exports.bs_noun = function(){return ["synergies", "web-readiness", "paradigms", "markets", "partnerships", "infrastructures", "platforms", "initiatives", "channels", "eyeballs", "communities", "ROI", "solutions", "e-tailers", "e-services", "action-items", "portals", "niches", "technologies", "content", "vortals", "supply-chains", "convergence", "relationships", "architectures", "interfaces", "e-markets", "e-commerce", "systems", "bandwidth", "infomediaries", "models", "mindshare", "deliverables", "users", "schemas", "networks", "applications", "metrics", "e-business", "functionalities", "experiences", "web services", "methodologies"];};
+exports.bs_noun = ["synergies", "web-readiness", "paradigms", "markets", "partnerships", "infrastructures", "platforms", "initiatives", "channels", "eyeballs", "communities", "ROI", "solutions", "e-tailers", "e-services", "action-items", "portals", "niches", "technologies", "content", "vortals", "supply-chains", "convergence", "relationships", "architectures", "interfaces", "e-markets", "e-commerce", "systems", "bandwidth", "infomediaries", "models", "mindshare", "deliverables", "users", "schemas", "networks", "applications", "metrics", "e-business", "functionalities", "experiences", "web services", "methodologies"];
-exports.domain_suffix = function(){return ["co.uk", "com", "us", "uk", "ca", "biz", "info", "name"];};
+exports.domain_suffix = ["co.uk", "com", "us", "net", "ca", "biz", "info", "name", "io", "org", "biz", "tv", "me"];
// lorem.js definitions
-exports.lorem = function(){return ["alias","consequatur","aut","perferendis","sit","voluptatem","accusantium","doloremque","aperiam","eaque","ipsa","quae","ab","illo","inventore","veritatis","et","quasi","architecto","beatae","vitae","dicta","sunt","explicabo","aspernatur","aut","odit","aut","fugit","sed","quia","consequuntur","magni","dolores","eos","qui","ratione","voluptatem","sequi","nesciunt","neque","dolorem","ipsum","quia","dolor","sit","amet","consectetur","adipisci","velit","sed","quia","non","numquam","eius","modi","tempora","incidunt","ut","labore","et","dolore","magnam","aliquam","quaerat","voluptatem","ut","enim","ad","minima","veniam","quis","nostrum","exercitationem","ullam","corporis","nemo","enim","ipsam","voluptatem","quia","voluptas","sit","suscipit","laboriosam","nisi","ut","aliquid","ex","ea","commodi","consequatur","quis","autem","vel","eum","iure","reprehenderit","qui","in","ea","voluptate","velit","esse","quam","nihil","molestiae","et","iusto","odio","dignissimos","ducimus","qui","blanditiis","praesentium","laudantium","totam","rem","voluptatum","deleniti","atque","corrupti","quos","dolores","et","quas","molestias","excepturi","sint","occaecati","cupiditate","non","provident","sed","ut","perspiciatis","unde","omnis","iste","natus","error","similique","sunt","in","culpa","qui","officia","deserunt","mollitia","animi","id","est","laborum","et","dolorum","fuga","et","harum","quidem","rerum","facilis","est","et","expedita","distinctio","nam","libero","tempore","cum","soluta","nobis","est","eligendi","optio","cumque","nihil","impedit","quo","porro","quisquam","est","qui","minus","id","quod","maxime","placeat","facere","possimus","omnis","voluptas","assumenda","est","omnis","dolor","repellendus","temporibus","autem","quibusdam","et","aut","consequatur","vel","illum","qui","dolorem","eum","fugiat","quo","voluptas","nulla","pariatur","at","vero","eos","et","accusamus","officiis","debitis","aut","rerum","necessitatibus","saepe","eveniet","ut","et","voluptates","repudiandae","sint","et","molestiae","non","recusandae","itaque","earum","rerum","hic","tenetur","a","sapiente","delectus","ut","aut","reiciendis","voluptatibus","maiores","doloribus","asperiores","repellat"];};
+exports.lorem = ["alias", "consequatur", "aut", "perferendis", "sit", "voluptatem", "accusantium", "doloremque", "aperiam", "eaque", "ipsa", "quae", "ab", "illo", "inventore", "veritatis", "et", "quasi", "architecto", "beatae", "vitae", "dicta", "sunt", "explicabo", "aspernatur", "aut", "odit", "aut", "fugit", "sed", "quia", "consequuntur", "magni", "dolores", "eos", "qui", "ratione", "voluptatem", "sequi", "nesciunt", "neque", "dolorem", "ipsum", "quia", "dolor", "sit", "amet", "consectetur", "adipisci", "velit", "sed", "quia", "non", "numquam", "eius", "modi", "tempora", "incidunt", "ut", "labore", "et", "dolore", "magnam", "aliquam", "quaerat", "voluptatem", "ut", "enim", "ad", "minima", "veniam", "quis", "nostrum", "exercitationem", "ullam", "corporis", "nemo", "enim", "ipsam", "voluptatem", "quia", "voluptas", "sit", "suscipit", "laboriosam", "nisi", "ut", "aliquid", "ex", "ea", "commodi", "consequatur", "quis", "autem", "vel", "eum", "iure", "reprehenderit", "qui", "in", "ea", "voluptate", "velit", "esse", "quam", "nihil", "molestiae", "et", "iusto", "odio", "dignissimos", "ducimus", "qui", "blanditiis", "praesentium", "laudantium", "totam", "rem", "voluptatum", "deleniti", "atque", "corrupti", "quos", "dolores", "et", "quas", "molestias", "excepturi", "sint", "occaecati", "cupiditate", "non", "provident", "sed", "ut", "perspiciatis", "unde", "omnis", "iste", "natus", "error", "similique", "sunt", "in", "culpa", "qui", "officia", "deserunt", "mollitia", "animi", "id", "est", "laborum", "et", "dolorum", "fuga", "et", "harum", "quidem", "rerum", "facilis", "est", "et", "expedita", "distinctio", "nam", "libero", "tempore", "cum", "soluta", "nobis", "est", "eligendi", "optio", "cumque", "nihil", "impedit", "quo", "porro", "quisquam", "est", "qui", "minus", "id", "quod", "maxime", "placeat", "facere", "possimus", "omnis", "voluptas", "assumenda", "est", "omnis", "dolor", "repellendus", "temporibus", "autem", "quibusdam", "et", "aut", "consequatur", "vel", "illum", "qui", "dolorem", "eum", "fugiat", "quo", "voluptas", "nulla", "pariatur", "at", "vero", "eos", "et", "accusamus", "officiis", "debitis", "aut", "rerum", "necessitatibus", "saepe", "eveniet", "ut", "et", "voluptates", "repudiandae", "sint", "et", "molestiae", "non", "recusandae", "itaque", "earum", "rerum", "hic", "tenetur", "a", "sapiente", "delectus", "ut", "aut", "reiciendis", "voluptatibus", "maiores", "doloribus", "asperiores", "repellat"];
// phone_number.js definitions
-exports.phone_formats = function(){return [
- '###-###-####',
- '(###)###-####',
- '1-###-###-####',
- '###.###.####',
- '###-###-####',
- '(###)###-####',
- '1-###-###-####',
- '###.###.####',
- '###-###-#### x###',
- '(###)###-#### x###',
- '1-###-###-#### x###',
- '###.###.#### x###',
- '###-###-#### x####',
- '(###)###-#### x####',
- '1-###-###-#### x####',
- '###.###.#### x####',
- '###-###-#### x#####',
- '(###)###-#### x#####',
- '1-###-###-#### x#####',
- '###.###.#### x#####'
-];};
+exports.phone_formats = [
+ '###-###-####',
+ '(###)###-####',
+ '1-###-###-####',
+ '###.###.####',
+ '###-###-####',
+ '(###)###-####',
+ '1-###-###-####',
+ '###.###.####',
+ '###-###-#### x###',
+ '(###)###-#### x###',
+ '1-###-###-#### x###',
+ '###.###.#### x###',
+ '###-###-#### x####',
+ '(###)###-#### x####',
+ '1-###-###-#### x####',
+ '###.###.#### x####',
+ '###-###-#### x#####',
+ '(###)###-#### x#####',
+ '1-###-###-#### x#####',
+ '###.###.#### x#####'
+];
diff --git a/lib/helpers.js b/lib/helpers.js
index 26ae40e3..78aeab75 100644
--- a/lib/helpers.js
+++ b/lib/helpers.js
@@ -1,120 +1,124 @@
-var Faker = require('../Faker');
+var Faker = require('../index');
-// returns a single random number based on a range
-exports.randomNumber = function(range) {
- var r = Math.floor(Math.random()*range);
- return r;
+// backword-compatibility
+exports.randomNumber = function (range) {
+ return Faker.random.number(range);
};
-// takes an array and returns the array randomly sorted
-exports.randomize = function(array) {
- var r = Math.floor(Math.random()*array.length);
- return array[r];
+// backword-compatibility
+exports.randomize = function (array) {
+ return Faker.random.array_element(array);
};
-// parses string for a symbol and replace it with a random number from 1-10
-exports.replaceSymbolWithNumber = function(string, symbol){
-
- // default symbol is '#'
- if(typeof symbol == 'undefined'){
- var symbol = '#';
- }
-
- var str = '';
- for(var i = 0; i < string.length; i++){
- if(string[i] == symbol){
- str += Math.floor(Math.random()*10);
- }
- else{
- str += string[i];
- }
- }
- return str;
+// slugifies string
+exports.slugify = function (string) {
+ return string.replace(/ /g, '-').replace(/[^\w\.\-]+/g, '');
};
-// takes an array and returns it randomized
-exports.shuffle = function(o){
- for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
- return o;
+// parses string for a symbol and replace it with a random number from 1-10
+exports.replaceSymbolWithNumber = function (string, symbol) {
+ // default symbol is '#'
+ if (symbol === undefined) {
+ symbol = '#';
+ }
+
+ var str = '';
+ for (var i = 0; i < string.length; i++) {
+ if (string[i] == symbol) {
+ str += Math.floor(Math.random() * 10);
+ } else {
+ str += string[i];
+ }
+ }
+ return str;
};
-
-exports.generateDataSet = function(size){
-
+// takes an array and returns it randomized
+exports.shuffle = function (o) {
+ for (var j, x, i = o.length; i; j = parseInt(Math.random() * i, 10), x = o[--i], o[i] = o[j], o[j] = x);
+ return o;
};
-exports.createCard = function(){
-
- return {
- "name":Faker.Name.findName(),
- "username":Faker.Internet.userName(),
- "email":Faker.Internet.email(),
- "address":{
- "streetA":Faker.Address.streetName(),
- "streetB":Faker.Address.streetAddress(),
- "streetC":Faker.Address.streetAddress(true),
- "streetD":Faker.Address.secondaryAddress(),
- "city":Faker.Address.city(),
- "ukCounty":Faker.Address.ukCounty(),
- "ukCountry":Faker.Address.ukCountry(),
- "zipcode":Faker.Address.zipCode()
- },
- "phone":Faker.PhoneNumber.phoneNumber(),
- "website":Faker.Internet.domainName(),
- "company":{
- "name":Faker.Company.companyName(),
- "catchPhrase":Faker.Company.catchPhrase(),
- "bs":Faker.Company.bs(),
- },
- "posts":[
- {
- "words":Faker.Lorem.words(),
- "sentence":Faker.Lorem.sentence(),
- "sentences":Faker.Lorem.sentences(),
- "paragraph":Faker.Lorem.paragraph()
- },
- {
- "words":Faker.Lorem.words(),
- "sentence":Faker.Lorem.sentence(),
- "sentences":Faker.Lorem.sentences(),
- "paragraph":Faker.Lorem.paragraph()
- },
- {
- "words":Faker.Lorem.words(),
- "sentence":Faker.Lorem.sentence(),
- "sentences":Faker.Lorem.sentences(),
- "paragraph":Faker.Lorem.paragraph()
- }
- ]
- };
+exports.createCard = function () {
+ return {
+ "name": Faker.Name.findName(),
+ "username": Faker.Internet.userName(),
+ "email": Faker.Internet.email(),
+ "address": {
+ "streetA": Faker.Address.streetName(),
+ "streetB": Faker.Address.streetAddress(),
+ "streetC": Faker.Address.streetAddress(true),
+ "streetD": Faker.Address.secondaryAddress(),
+ "city": Faker.Address.city(),
+ "ukCounty": Faker.Address.ukCounty(),
+ "ukCountry": Faker.Address.ukCountry(),
+ "zipcode": Faker.Address.zipCode(),
+ "geo": {
+ "lat": Faker.Address.latitude(),
+ "lng": Faker.Address.longitude()
+ }
+ },
+ "phone": Faker.PhoneNumber.phoneNumber(),
+ "website": Faker.Internet.domainName(),
+ "company": {
+ "name": Faker.Company.companyName(),
+ "catchPhrase": Faker.Company.catchPhrase(),
+ "bs": Faker.Company.bs()
+ },
+ "posts": [
+ {
+ "words": Faker.Lorem.words(),
+ "sentence": Faker.Lorem.sentence(),
+ "sentences": Faker.Lorem.sentences(),
+ "paragraph": Faker.Lorem.paragraph()
+ },
+ {
+ "words": Faker.Lorem.words(),
+ "sentence": Faker.Lorem.sentence(),
+ "sentences": Faker.Lorem.sentences(),
+ "paragraph": Faker.Lorem.paragraph()
+ },
+ {
+ "words": Faker.Lorem.words(),
+ "sentence": Faker.Lorem.sentence(),
+ "sentences": Faker.Lorem.sentences(),
+ "paragraph": Faker.Lorem.paragraph()
+ }
+ ]
+ };
};
-exports.userCard = function(){
-
- return {
- "name":Faker.Name.findName(),
- "username":Faker.Internet.userName(),
- "email":Faker.Internet.email(),
- "address":{
- "street":Faker.Address.streetName(true),
- "suite":Faker.Address.secondaryAddress(),
- "city":Faker.Address.city(),
- "zipcode":Faker.Address.zipCode()
- },
- "phone":Faker.PhoneNumber.phoneNumber(),
- "website":Faker.Internet.domainName(),
- "company":{
- "name":Faker.Company.companyName(),
- "catchPhrase":Faker.Company.catchPhrase(),
- "bs":Faker.Company.bs(),
- },
- };
+exports.userCard = function () {
+ return {
+ "name": Faker.Name.findName(),
+ "username": Faker.Internet.userName(),
+ "email": Faker.Internet.email(),
+ "address": {
+ "street": Faker.Address.streetName(true),
+ "suite": Faker.Address.secondaryAddress(),
+ "city": Faker.Address.city(),
+ "zipcode": Faker.Address.zipCode(),
+ "geo": {
+ "lat": Faker.Address.latitude(),
+ "lng": Faker.Address.longitude()
+ }
+ },
+ "phone": Faker.PhoneNumber.phoneNumber(),
+ "website": Faker.Internet.domainName(),
+ "company": {
+ "name": Faker.Company.companyName(),
+ "catchPhrase": Faker.Company.catchPhrase(),
+ "bs": Faker.Company.bs()
+ }
+ };
};
-String.prototype.capitalize = function(){ //v1.0
- return this.replace(/\w+/g, function(a){
+/*
+String.prototype.capitalize = function () { //v1.0
+ return this.replace(/\w+/g, function (a) {
return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();
});
-}; \ No newline at end of file
+};
+*/
diff --git a/lib/image.js b/lib/image.js
new file mode 100644
index 00000000..c2edbbef
--- /dev/null
+++ b/lib/image.js
@@ -0,0 +1,68 @@
+var Faker = require('../index');
+var image = {
+ UIFaces: {
+ //All this avatar have been authorized by its awesome users to be use on live websites (not just mockups)
+ //For more information, please visit: http://uifaces.com/authorized
+ avatarJSON: '["https://s3.amazonaws.com/uifaces/faces/twitter/jarjan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mahdif/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sprayaga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ruzinav/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Skyhartman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/moscoz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kurafire/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/91bilal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/igorgarybaldi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/malykhinv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joelhelin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kushsolitary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/snowshade/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/areus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/holdenweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heyimjuani/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/envex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/unterdreht/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/collegeman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peejfancher/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andyisonline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ultragex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fuck_you_two/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adellecharles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ateneupopular/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmetalpbalkan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Stievius/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kerem/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osvaldas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelceballos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thierrykoblentz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peterlandt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/catarino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/weglov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandclay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flame_kaizar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmetsulek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicolasfolliot/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jayrobinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorerixon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolage/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michzen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markjenkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicolai_larsen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/noxdzine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alagoon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/idiot/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mizko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chadengle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mutlu82/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/simobenso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vocino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guiiipontes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/soyjavi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshaustin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tomaslau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/VinThomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ManikRathee/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/langate/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cemshid/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leemunroe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_shahedk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BillSKenney/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/divya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshhemsley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sindresorhus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/soffes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/9lessons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/linux29/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Chakintosh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anaami/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joreira/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shadeed9/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottkclark/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jedbridges/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salleedesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marakasina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ariil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BrianPurkiss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelmartinho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bublienko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/devankoshal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ZacharyZorbas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timmillwood/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshuasortino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/damenleeturks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tomas_janousek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herrhaase/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/RussellBishop/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brajeshwar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nachtmeister/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cbracco/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bermonpainter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdullindenis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isacosta/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/suprb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yalozhkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chandlervdw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamgarth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_victa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/commadelimited/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/roybarberuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/axel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladarbatov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ffbel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/syropian/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ankitind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/traneblow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flashmurphy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ChrisFarina78/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baliomega/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saschamt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jm_denis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anoff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kennyadr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chatyrko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dingyi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mds/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terryxlife/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaroni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kinday/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prrstn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eduardostuart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhilipsiva/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/GavicoInd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rohixx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/blakesimkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leeiio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tjrus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uberschizo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kylefoundry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/claudioguglieri/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ripplemdk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/exentrich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jakemoore/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joaoedumedeiros/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/poormini/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tereshenkov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/keryilmaz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haydn_woods/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rude/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/llun/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sgaurav_baghel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jamiebrittain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/badlittleduck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pifagor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/agromov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benefritz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/erwanhesry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/diesellaws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremiaha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/koridhandy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chaensel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewcohen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smaczny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gonzalorobaina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nandini_m/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sydlawrence/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cdharrison/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tgerken/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lewisainslie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charliecwaite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robbschiller/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/flexrs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattdetails/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/raquelwilson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karsh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrmartineau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/opnsrce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hgharrygo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maximseshuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxalex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samihah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chanpory/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sharvin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josemarques/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jefffis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/krystalfister/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lokesh_coder/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thedamianhdez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dpmachado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/funwatercat/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timothycd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ivanfilipovbg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/picard102/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcobarbosa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/krasnoukhov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/g3d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ademilter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rickdt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/operatino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bungiwan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hugomano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/logorado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dc_user/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/horaciobella/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/SlaapMe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teeragit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iqonicd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ilya_pestov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewarrow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ssiskind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/HenryHoffman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rdsaunders/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamsxu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/curiousoffice/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themadray/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michigangraham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kohette/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nickfratter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/runningskull/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madysondesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brenton_clarke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jennyshen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bradenhamm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kurtinc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amanruzaini/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyhaggard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Karimmove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaronalfred/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wtrsld/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jitachi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/therealmarvin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pmeissner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ooomz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chacky14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jesseddy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thinmatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shanehudson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akmur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/IsaryAmairani/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arthurholcombe1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andychipster/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/boxmodel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ehsandiary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/LucasPerdidao/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shalt0ni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/swaplord/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaelifa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/plbabin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guillemboti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arindam_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/renbyrd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thiagovernetti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jmillspaysbills/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikemai2awesome/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jervo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mekal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sta1ex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robergd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/felipecsl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrea211087/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/garand/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhooyenga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abovefunction/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pcridesagain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/randomlies/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BryanHorsey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heykenneth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dahparra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allthingssmitty/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danvernon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/beweinreich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/increase/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falvarad/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alxndrustinov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/souuf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/orkuncaylar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/AM_Kn2/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gearpixels/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bassamology/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vimarethomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kosmar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/SULiik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrjamesnoble/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/silvanmuhlemann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shaneIxD/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nacho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yigitpinarbasi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buzzusborne/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aaronkwhite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rmlewisuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/giancarlon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nbirckel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d_nny_m_cher/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sdidonato/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/atariboy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abotap/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karalek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/psdesignuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ludwiczakpawel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nemanjaivanovic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baluli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ahmadajmi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vovkasolovev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samgrover/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derienzo777/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonathansimmons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nelsonjoyce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/S0ufi4n3/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xtopherpaul/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oaktreemedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nateschulte/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/findingjenny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/namankreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antonyzotov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/we_social/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leehambley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/solid_color/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abelcabans/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mbilderbach/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kkusaa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jordyvdboom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosgavina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pechkinator/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vc27/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rdbannon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/croakx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/suribbles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kerihenare/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/catadeleon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gcmorley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/duivvv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saschadroste/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorDubugras/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wintopia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattbilotti/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/taylorling/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/megdraws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/meln1ks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mahmoudmetwally/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Silveredge9/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derekebradley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/happypeter1983/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/travis_arnold/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artem_kostenko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adobi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/daykiine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alek_djuric/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scips/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/miguelmendes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrhee/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alsobrooks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fronx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mcflydesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/santi_urso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allfordesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stayuber/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bertboerland/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marosholly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamnac/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cynthiasavard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/muringa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hiemil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jackiesaik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zacsnider/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iduuck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antjanus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aroon_sharma/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dshster/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thehacker/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelbrooksjr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryanmclaughlin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/clubb3rry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/taybenlor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xripunov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/myastro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adityasutomo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/digitalmaverick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hjartstrorn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itolmach/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vaughanmoffitt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdots/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isnifer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sergeysafonov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scrapdnb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrismj83/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vitorleal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sokaniwaal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zaki3d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/illyzoren/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mocabyte/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osmanince/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/djsherman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidhemphill/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/waghner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/necodymiconer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/praveen_vijaya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fabbrucci/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cliffseal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/travishines/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kuldarkalvik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Elt_n/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/phillapier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okseanjay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/id835559/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kudretkeskin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anjhero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/duck4fuck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scott_riley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/noufalibrahim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/h1brd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/borges_marcos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/devinhalladay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ciaranr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefooo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikebeecham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tonymillion/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshuaraichur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/irae/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petrangr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dmitriychuta/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charliegann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arashmanteghi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adhamdannaway/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ainsleywagon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/svenlen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/faisalabid/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/beshur/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlyson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dutchnadia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teddyzetterlund/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samuelkraft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aoimedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/toddrew/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/codepoet_ru/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artvavs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benoitboucart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jomarmen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolmarlopez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/creartinc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/homka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gaborenton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robinclediere/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maximsorokin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/plasticine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j2deme/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peachananr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kapaluccio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/de_ascanio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rikas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dawidwu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelcreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rpatey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/popey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rehatkathuria/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/the_purplebunny/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/1markiz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ajaxy_ru/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brenmurrell/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dudestein/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oskarlevinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorstuber/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nehfy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vicivadeline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leandrovaranda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottgallant/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victor_haydin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sawrb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryhanhassan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amayvs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a_brixen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karolkrakowiak_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herkulano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geran7/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cggaurav/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chris_witko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lososina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/polarity/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattlat/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonburke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/constantx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/teylorfeliz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craigelimeliah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rachelreveley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reabo101/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rahmeen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rickyyean/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j04ntoh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spbroma/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sebashton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jpenico/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/francis_vega/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oktayelipek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kikillo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fabbianz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/larrygerard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BroumiYoussef/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/0therplanet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mbilalsiddique1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ionuss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/grrr_nl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/liminha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rawdiggie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryandownie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sethlouey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pixage/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arpitnj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/switmer777/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josevnclch/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kanickairaj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/puzik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tbakdesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/besbujupi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/supjoey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lowie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/linkibol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/balintorosz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imcoding/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/agustincruiz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gusoto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thomasschrijer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/superoutman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kalmerrautam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gabrielizalo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gojeanyn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidbaldie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_vojto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/laurengray/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jydesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mymyboy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nellleo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marciotoledo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ninjad3m0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/to_soham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hasslunsford/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/muridrahhal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/levisan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/grahamkennery/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lepetitogre/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antongenkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nessoila/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amandabuzard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/safrankov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cocolero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dss49/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matt3224/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bluesix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/quailandquasar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/AlbertoCococi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lepinski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sementiy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhudobivnik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thibaut_re/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/olgary/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shojberg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mtolokonnikov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bereto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/naupintos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wegotvices/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xadhix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/macxim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rodnylobos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madcampos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madebyvadim/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bartoszdawydzik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/supervova/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markretzloff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vonachoo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/darylws/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stevedesigner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mylesb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/herbigt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/depaulawagner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geshan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gizmeedevil1991/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_scottburgess/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lisovsky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidsasda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/artd_sign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/YoungCutlass/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mgonto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itstotallyamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victorquinn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/osmond/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oksanafrewer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zauerkraut/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamkeithmason/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nitinhayaran/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lmjabreu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mandalareopens/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thinkleft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ponchomendivil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juamperro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brunodesign1206/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/caseycavanagh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/luxe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dotgridline/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spedwig/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madewulf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mattsapii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/helderleal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisstumph/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jayphen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nsamoylov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisvanderkooi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justme_timothyg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/otozk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prinzadi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gu5taf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cyril_gaillard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d_kobelyatsky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/daniloc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nwdsha/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/romanbulah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/skkirilov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dvdwinden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dannol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thekevinjones/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jwalter14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timgthomas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buddhasource/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxpiper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thatonetommy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/diansigitp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adrienths/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/klimmka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gkaam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/derekcramer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jennyyo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nerrsoft/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xalionmalik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edhenderson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/keyuri85/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/roxanejammet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kimcool/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edkf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matkins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alessandroribe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jacksonlatka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lebronjennan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kostaspt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karlkanall/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/moynihan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danpliego/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saulihirvi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wesleytrankin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fjaguero/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bowbrick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mashaaaaal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yassiryahya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dparrelli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fotomagin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aka_james/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/denisepires/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iqbalperkasa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/martinansty/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jarsen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/r_oy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gabrielrosser/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/malgordon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlfairclough/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelabehsera/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pierrestoffe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enjoythetau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/loganjlambert/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rpeezy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coreyginnivan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michalhron/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/msveet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lingeswaran/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kolsvein/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/peter576/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reideiredale/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joeymurdah/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/raphaelnikson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mvdheuvel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maxlinderman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jimmuirhead/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/begreative/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/frankiefreesbie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robturlinckx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Talbi_ConSept/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/longlivemyword/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vanchesz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maiklam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hermanobrother/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rez___a/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregsqueeb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/greenbes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_ragzor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anthonysukow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fluidbrush/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dactrtr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jehnglynn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bergmartin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hugocornejo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_kkga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dzantievm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sawalazar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sovesove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonsgotwood/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/byryan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vytautas_a/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mizhgan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cicerobr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nilshelmersson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d33pthought/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davecraige/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nckjrvs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alexandermayes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jcubic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craigrcoles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bagawarman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rob_thomas10/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cofla/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/maikelk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rtgibbons/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/russell_baylis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhesslow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/codysanfilippo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/webtanya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madebybrenton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dcalonaci/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/perfectflow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jjsiii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/saarabpreet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kumarrajan12123/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamsteffen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themikenagle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ceekaytweet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/larrybolt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/conspirator/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dallasbpeters/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n3dmax/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terpimost/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kirillz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/byrnecore/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/j_drake_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/calebjoyce/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/russoedu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hoangloi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tobysaxon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gofrasdesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dimaposnyy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tjisousa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okandungel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/billyroshan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oskamaya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/motionthinks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/knilob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ashocka18/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marrimo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bartjo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/omnizya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ernestsemerda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andreas_pr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edgarchris99/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thomasgeisen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gseguin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joannefournier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/demersdesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adammarsbar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nasirwd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n_tassone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/javorszky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/themrdave/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yecidsm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicollerich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/canapud/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicoleglynn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/judzhin_miles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/designervzm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kianoshp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/evandrix/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alterchuca/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhrubo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ma_tiax/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ssbb_me/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dorphern/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mauriolg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bruno_mart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mactopus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/the_winslet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joemdesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/Shriiiiimp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jacobbennett/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nfedoroff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamglimy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/allagringaus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aiiaiiaii/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/olaolusoga/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buryaknick/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wim1k/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nicklacke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a1chapone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/steynviljoen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/strikewan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryankirkman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewabogado/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/doooon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jagan123/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ariffsetiawan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elenadissi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mwarkentin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thierrymeier_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/r_garcia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dmackerman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/borantula/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/konus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/spacewood_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryuchi311/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/evanshajed/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tristanlegros/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shoaib253/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aislinnkelly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okcoker/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/timpetricola/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sunshinedgirl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chadami/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleclarsoniv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nomidesigns/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petebernardo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottiedude/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/millinet/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imsoper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imammuht/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/benjamin_knight/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nepdud/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joki4/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lanceguyatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bboy1895/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/amywebbb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rweve/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haruintesettden/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ricburton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nelshd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/batsirai/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/primozcigler/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jffgrdnr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/8d3k/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geneseleznev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/al_li/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/souperphly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mslarkina/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/2fockus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cdavis565/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xiel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/turkutuuli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/uxward/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lebinoclard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gauravjassal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidmerrique/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mdsisto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andrewofficer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kojourin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dnirmal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mr_shiznit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aluisio_azevedo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cloudstudio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danvierich/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alexivanichkin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fran_mchamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/perretmagali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/betraydan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cadikkara/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matbeedotcom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremyworboys/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bpartridge/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelkoper/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/silv3rgvn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alevizio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johnsmithagency/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lawlbwoy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vitor376/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/desastrozo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thimo_cz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jasonmarkjones/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lhausermann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xravil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/guischmitt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vigobronx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/panghal0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/miguelkooreman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/surgeonist/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/christianoliff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/caspergrl/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamkarna/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ipavelek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pierre_nel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/y2graphic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sterlingrules/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elbuscainfo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bennyjien/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stushona/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/estebanuribe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/embrcecreations/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danillos/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elliotlewis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/charlesrpratt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladyn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emmeffess/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosblanco_eu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/leonfedotov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rangafangs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chris_frees/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tgormtx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bryan_topham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jpscribbles/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mighty55/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carbontwelve/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/isaacfifth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/iamjdeleon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/snowwrite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/barputro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/drewbyreese/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sachacorazzi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bistrianiosip/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/magoo04/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pehamondello/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yayteejay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/a_harris88/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/algunsanabria/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zforrester/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ovall/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosjgsousa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/geobikas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ah_lice/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/looneydoodle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nerdgr8/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ddggccaa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zackeeler/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/normanbox/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/el_fuertisimo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ismail_biltagi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juangomezw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jnmnrd/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/patrickcoombe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ryanjohnson_me/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markolschesky/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeffgolenski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kvasnic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lindseyzilla/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gauchomatt/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/afusinatto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevinoh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/okansurreel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adamawesomeface/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emileboudeling/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arishi_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juanmamartinez/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wikiziner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danthms/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mkginfo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/terrorpixel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/curiousonaut/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/prheemo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelcolenso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/foczzi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/martip07/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thaodang17/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johncafazza/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/robinlayfield/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/franciscoamk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/abdulhyeuk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marklamb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/edobene/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andresenfredrik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mikaeljorhult/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chrisslowik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vinciarts/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/meelford/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elliotnolten/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yehudab/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vijaykarthik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bfrohs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josep_martins/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/attacks/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sur4dye/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tumski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/instalox/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mangosango/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/paulfarino/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kazaky999/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kiwiupover/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nvkznemo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tom_even/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ratbus/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/woodsman001/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joshmedeski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thewillbeard/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/psaikali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joe_black/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleinadsays/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcusgorillius/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hota_v/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jghyllebert/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shinze/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/janpalounek/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremiespoken/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/her_ruu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dansowter/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/felipeapiress/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/magugzbrand2d/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/posterjob/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nathalie_fs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bobbytwoshoes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dreizle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremymouton/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/elisabethkjaer/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/notbadart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mohanrohith/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jlsolerdeltoro/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itskawsar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/slowspock/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/zvchkelly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wiljanslofstra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/craighenneberry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/trubeatto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/juaumlol/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/samscouto/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/BenouarradeM/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gipsy_raf/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/netonet_il/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/arkokoley/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/itsajimithing/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smalonso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/victordeanda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_dwite_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/richardgarretts/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregrwilkinson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anatolinicolae/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lu4sh1i/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefanotirloni/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ostirbu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/darcystonge/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/naitanamoreno/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/michaelcomiskey/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/adhiardana/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marcomano_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/davidcazalis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falconerie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gregkilian/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bcrad/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bolzanmarco/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/low_res/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vlajki/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/petar_prog/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jonkspr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akmalfikri/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mfacchinello/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/atanism/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/harry_sistalam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/murrayswift/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bobwassermann/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gavr1l0/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/madshensel/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mr_subtle/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/deviljho_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salimianoff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joetruesdell/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/twittypork/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/airskylar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dnezkumar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dgajjar/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cherif_b/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/salvafc/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/louis_currie/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/deeenright/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cybind/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eyronn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vickyshits/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sweetdelisa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/cboller1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andresdjasso/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/melvindidit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andysolomon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thaisselenator_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lvovenok/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/giuliusa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/belyaev_rs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/overcloacked/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kamal_chaneman/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/incubo82/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hellofeverrrr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mhaligowski/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sunlandictwin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bu7921/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/andytlaw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremery/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/finchjke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/manigm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/umurgdk/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/scottfeltham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ganserene/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mutu_krish/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jodytaggart/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ntfblog/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tanveerrao/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hfalucas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alxleroydeval/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kucingbelang4/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bargaorobalo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/colgruv/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stalewine/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kylefrost/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baumannzone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/angelcolberg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sachingawas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jjshaw14/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ramanathan_pdy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johndezember/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nilshoenson/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonmorreale/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nutzumi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/brandonflatsoda/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sergeyalmone/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/klefue/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kirangopal/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/baumann_alex/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/matthewkay_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jay_wilburn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shesgared/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/apriendeau/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johnriordan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wake_gs/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aleksitappura/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emsgulam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xilantra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/imomenui/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sircalebgrove/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/newbrushes/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hsinyo23/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/m4rio/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/katiemdaly/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/s4f1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ecommerceil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marlinjayakody/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/swooshycueb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sangdth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/coderdiaz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bluefx_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vivekprvr/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sasha_shestakov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eugeneeweb/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dgclegg/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/n1ght_coder/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dixchen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/blakehawksworth/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/trueblood_33/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hai_ninh_nguyen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marclgonzales/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/yesmeck/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stephcoue/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/doronmalki/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ruehldesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/anasnakawa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kijanmaharjan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/wearesavas/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefvdham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tweetubhai/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alecarpentier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/fiterik/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/antonyryndya/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/d00maz/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/theonlyzeke/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/missaaamy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/carlosm/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/manekenthe/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/reetajayendra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jeremyshimko/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/justinrgraham/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/stefanozoffoli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/overra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrebay007/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/shvelo96/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/pyronite/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/thedjpetersen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/rtyukmaev/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_williamguerra/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/albertaugustin/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vikashpathak18/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kevinjohndayy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vj_demien/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/colirpixoil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/goddardlewis/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/laasli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jqiuss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/heycamtaylor/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nastya_mane/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mastermindesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ccinojasso1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/nyancecom/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sandywoodruff/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/bighanddesign/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sbtransparent/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aviddayentonbay/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/richwild/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaysix_dizzy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/tur8le/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/seyedhossein1/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/privetwagner/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/emmandenn/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dev_essentials/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jmfsocial/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_yardenoon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mateaodviteza/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/weavermedia/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mufaddal_mw/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hafeeskhan/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ashernatali/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sulaqo/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eddiechen/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/josecarlospsh/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vm_f/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/enricocicconi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/danmartin70/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/gmourier/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/donjain/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mrxloka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/_pedropinho/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/eitarafa/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/oscarowusu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ralph_lam/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/panchajanyag/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/woodydotmx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/jerrybai1907/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/marshallchen_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/xamorep/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aio___/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/chaabane_wail/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/txcx/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/akashsharma39/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/falling_soul/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sainraja/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mugukamil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/johannesneu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/markwienands/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/karthipanraj/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/balakayuriy/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/alan_zhang_/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/layerssss/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/kaspernordkvist/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/mirfanqureshi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/hanna_smi/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/VMilescu/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/aeon56/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/m_kalibry/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/sreejithexp/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dicesales/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/dhoot_amit/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/smenov/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/lonesomelemon/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vladimirdevic/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/joelcipriano/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/haligaliharun/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/buleswapnil/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/serefka/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/ifarafonow/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/vikasvinfotech/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/urrutimeoli/128.jpg","https://s3.amazonaws.com/uifaces/faces/twitter/areandacom/128.jpg"]',
+ avatar: function() {
+ var avatars = eval(image.UIFaces.avatarJSON);
+
+ return Faker.random.array_element(avatars)
+ }
+ },
+ LoremPixel: {
+ imageProviderUrl: 'http://lorempixel.com/',
+ imageUrl: function (width, height, category) {
+ var width = width || 640;
+ var height = height || 480;
+
+ var url = image.LoremPixel.imageProviderUrl + width + '/' + height;
+ if (typeof category !== 'undefined') {
+ url += '/' + category;
+ }
+
+ return url;
+ },
+ abstract: function (width, height) {
+ return image.LoremPixel.imageUrl(width, height, 'abstract');
+ },
+ animals: function (width, height) {
+ return image.LoremPixel.imageUrl(width, height, 'animals');
+ },
+ business: function (width, height) {
+ return image.LoremPixel.imageUrl(width, height, 'business');
+ },
+ cats: function (width, height) {
+ return image.LoremPixel.imageUrl(width, height, 'cats');
+ },
+ city: function (width, height) {
+ return image.LoremPixel.imageUrl(width, height, 'city');
+ },
+ food: function (width, height) {
+ return image.LoremPixel.imageUrl(width, height, 'food');
+ },
+ nightlife: function (width, height) {
+ return image.LoremPixel.imageUrl(width, height, 'nightlife');
+ },
+ fashion: function (width, height) {
+ return image.LoremPixel.imageUrl(width, height, 'fashion');
+ },
+ people: function (width, height) {
+ return image.LoremPixel.imageUrl(width, height, 'people');
+ },
+ nature: function (width, height) {
+ return image.LoremPixel.imageUrl(width, height, 'nature');
+ },
+ sports: function (width, height) {
+ return image.LoremPixel.imageUrl(width, height, 'sports');
+ },
+ technics: function (width, height) {
+ return image.LoremPixel.imageUrl(width, height, 'technics');
+ },
+ transport: function (width, height) {
+ return image.LoremPixel.imageUrl(width, height, 'transport');
+ }
+ }
+};
+
+module.exports = image;
diff --git a/lib/internet.js b/lib/internet.js
index ac462f76..898769de 100644
--- a/lib/internet.js
+++ b/lib/internet.js
@@ -1,39 +1,43 @@
-var Helpers = require('./helpers');
-var definitions = require('./definitions');
+var Faker = require('../index');
-exports.email = function() {
- return this.userName() + "@" + this.domainName();
-};
+var internet = {
+ email: function () {
+ return Faker.Helpers.slugify(this.userName()) + "@" + Faker.Helpers.slugify(this.domainName());
+ },
-exports.userName = function() {
- switch(Helpers.randomNumber(2))
- {
- case 0:
- return Helpers.randomize(definitions.first_name());
- break;
- case 1:
- return Helpers.randomize(definitions.first_name()) + Helpers.randomize([".", "_"]) + Helpers.randomize(definitions.last_name()) ;
- break;
- }
-};
+ userName: function () {
+ var result;
+ switch (Faker.random.number(2)) {
+ case 0:
+ result = Faker.random.first_name();
+ break;
+ case 1:
+ result = Faker.random.first_name() + Faker.random.array_element([".", "_"]) + Faker.random.last_name();
+ break;
+ }
+ return result;
+ },
-exports.domainName = function() {
- return this.domainWord() + "." + Helpers.randomize(definitions.domain_suffix());
-};
+ domainName: function () {
+ return this.domainWord() + "." + Faker.random.domain_suffix();
+ },
-exports.domainWord = function() {
- return Helpers.randomize(definitions.first_name()).toLowerCase();
-};
+ domainWord: function () {
+ return Faker.random.first_name().toLowerCase();
+ },
-exports.ip = function() {
- var randNum = function() {
- return (Math.random()*254 + 1).toFixed(0);
- }
+ ip: function () {
+ var randNum = function () {
+ return (Math.random() * 254 + 1).toFixed(0);
+ };
- var result = [];
- for(var i=0; i<4; i++) {
- result[i] = randNum();
- }
+ var result = [];
+ for (var i = 0; i < 4; i++) {
+ result[i] = randNum();
+ }
- return result.join(".");
+ return result.join(".");
+ }
};
+
+module.exports = internet;
diff --git a/lib/lorem.js b/lib/lorem.js
index 8a408ec2..d6c6bfb9 100644
--- a/lib/lorem.js
+++ b/lib/lorem.js
@@ -1,40 +1,45 @@
+var Faker = require('../index');
var Helpers = require('./helpers');
var definitions = require('../lib/definitions');
-exports.words = function(num){
- if( typeof num == 'undefined'){ var num = 3;}
- return Helpers.shuffle(definitions.lorem()).slice(0, num);
- //Words.shuffle[0, num]
-};
+var lorem = {
+ words: function (num) {
+ if (typeof num == 'undefined') { num = 3; }
+ return Helpers.shuffle(definitions.lorem).slice(0, num);
+ },
-exports.sentence = function(wordCount){
- if( typeof wordCount == 'undefined'){ var wordCount = 3;}
+ sentence: function (wordCount, range) {
+ if (typeof wordCount == 'undefined') { wordCount = 3; }
+ if (typeof range == 'undefined') { range = 7; }
- // strange issue with the node_min_test failing for captialize, please fix and add this back
- //return this.words(wordCount + Helpers.randomNumber(7)).join(' ').capitalize();
+ // strange issue with the node_min_test failing for captialize, please fix and add this back
+ //return this.words(wordCount + Helpers.randomNumber(range)).join(' ').capitalize();
- return this.words(wordCount + Helpers.randomNumber(7)).join(' ');
-};
+ return this.words(wordCount + Faker.random.number(7)).join(' ');
+ },
-exports.sentences = function(sentenceCount){
- if( typeof sentenceCount == 'undefined'){ var sentenceCount = 3;}
- var sentences = [];
- for(sentenceCount; sentenceCount >= 0; sentenceCount--){
- sentences.push(this.sentence());
- }
- return sentences.join("\n");
-};
+ sentences: function (sentenceCount) {
+ if (typeof sentenceCount == 'undefined') { sentenceCount = 3; }
+ var sentences = [];
+ for (sentenceCount; sentenceCount > 0; sentenceCount--) {
+ sentences.push(this.sentence());
+ }
+ return sentences.join("\n");
+ },
-exports.paragraph = function(sentenceCount){
- if( typeof sentenceCount == 'undefined'){ var sentenceCount = 3;}
- return this.sentences(sentenceCount + Helpers.randomNumber(3));
-};
+ paragraph: function (sentenceCount) {
+ if (typeof sentenceCount == 'undefined') { sentenceCount = 3; }
+ return this.sentences(sentenceCount + Faker.random.number(3));
+ },
-exports.paragraphs = function(paragraphCount){
- if( typeof paragraphCount == 'undefined'){ var paragraphCount = 3;}
- var paragraphs = [];
- for(paragraphCount; paragraphCount >= 0; paragraphCount--){
- paragraphs.push(this.paragraph());
- }
- return paragraphs.join("\n \r\t");
+ paragraphs: function (paragraphCount) {
+ if (typeof paragraphCount == 'undefined') { paragraphCount = 3; }
+ var paragraphs = [];
+ for (paragraphCount; paragraphCount > 0; paragraphCount--) {
+ paragraphs.push(this.paragraph());
+ }
+ return paragraphs.join("\n \r\t");
+ }
};
+
+module.exports = lorem;
diff --git a/lib/name.js b/lib/name.js
index 0965b80e..48759dcf 100644
--- a/lib/name.js
+++ b/lib/name.js
@@ -1,35 +1,25 @@
-var Helpers = require('./helpers');
-var definitions = require('./definitions');
-
-/*
-exports.first_name = function(){
-
- return definitions.first_name()[0];
- //Math.floor(Math.random()*10);
-
-};
-*/
-
-exports.findName = function() {
- var r = Helpers.randomNumber(8);
- switch(r)
- {
- case 0:
- return Helpers.randomize(definitions.name_prefix()) + " " + Helpers.randomize(definitions.first_name()) + " " + Helpers.randomize(definitions.last_name());
- break;
- case 1:
- return Helpers.randomize(definitions.first_name()) + " " + Helpers.randomize(definitions.last_name()); + " " + Helpers.randomize(definitions.name_suffix);
- break;
- }
-
- return Helpers.randomize(definitions.first_name()) + " " + Helpers.randomize(definitions.last_name());
-
+var Faker = require('../index');
+
+var _name = {
+ firstName: function () {
+ return Faker.random.first_name();
+ },
+
+ lastName: function () {
+ return Faker.random.last_name();
+ },
+
+ findName: function () {
+ var r = Faker.random.number(8);
+ switch (r) {
+ case 0:
+ return Faker.random.name_prefix() + " " + this.firstName() + " " + this.lastName();
+ case 1:
+ return this.firstName() + " " + this.lastName() + " " + Faker.random.name_suffix();
+ }
+
+ return this.firstName() + " " + this.lastName();
+ }
};
-exports.firstName = function () {
- return Helpers.randomize(definitions.first_name());
-};
-
-exports.lastName = function () {
- return Helpers.randomize(definitions.last_name());
-};
+module.exports = _name;
diff --git a/lib/phone_number.js b/lib/phone_number.js
index 6fbf65bb..92ad539f 100644
--- a/lib/phone_number.js
+++ b/lib/phone_number.js
@@ -1,12 +1,16 @@
+var Faker = require('../index');
var Helpers = require('./helpers');
var definitions = require('./definitions');
-exports.phoneNumber = function(){
-
- return Helpers.replaceSymbolWithNumber(Helpers.randomize(definitions.phone_formats()));
+var phone = {
+ phoneNumber: function () {
+ return Helpers.replaceSymbolWithNumber(Faker.random.phone_formats());
+ },
+ // FIXME: this is strange passing in an array index.
+ phoneNumberFormat: function (phoneFormatsArrayIndex) {
+ return Helpers.replaceSymbolWithNumber(definitions.phone_formats[phoneFormatsArrayIndex]);
+ }
};
-exports.phoneNumberFormat = function ( format ){
- return Helpers.replaceSymbolWithNumber(definitions.phone_formats()[format]);
-}; \ No newline at end of file
+module.exports = phone;
diff --git a/lib/random.js b/lib/random.js
new file mode 100644
index 00000000..7d010109
--- /dev/null
+++ b/lib/random.js
@@ -0,0 +1,101 @@
+var definitions = require('./definitions');
+
+var random = {
+ // returns a single random number based on a range
+ number: function (range) {
+ return Math.floor(Math.random() * range);
+ },
+
+ // takes an array and returns the array randomly sorted
+ array_element: function (array) {
+ var r = Math.floor(Math.random() * array.length);
+ return array[r];
+ },
+
+ city_prefix: function () {
+ return this.array_element(definitions.city_prefix);
+ },
+
+ city_suffix: function () {
+ return this.array_element(definitions.city_suffix);
+ },
+
+ street_suffix: function () {
+ return this.array_element(definitions.street_suffix);
+ },
+
+ br_state: function () {
+ return this.array_element(definitions.br_state);
+ },
+
+ br_state_abbr: function () {
+ return this.array_element(definitions.br_state_abbr);
+ },
+
+ us_state: function () {
+ return this.array_element(definitions.us_state);
+ },
+
+ us_state_abbr: function () {
+ return this.array_element(definitions.us_state_abbr);
+ },
+
+ uk_county: function () {
+ return this.array_element(definitions.uk_county);
+ },
+
+ uk_country: function () {
+ return this.array_element(definitions.uk_country);
+ },
+
+ first_name: function () {
+ return this.array_element(definitions.first_name);
+ },
+
+ last_name: function () {
+ return this.array_element(definitions.last_name);
+ },
+
+ name_prefix: function () {
+ return this.array_element(definitions.name_prefix);
+ },
+
+ name_suffix: function () {
+ return this.array_element(definitions.name_suffix);
+ },
+
+ catch_phrase_adjective: function () {
+ return this.array_element(definitions.catch_phrase_adjective);
+ },
+
+ catch_phrase_descriptor: function () {
+ return this.array_element(definitions.catch_phrase_descriptor);
+ },
+
+ catch_phrase_noun: function () {
+ return this.array_element(definitions.catch_phrase_noun);
+ },
+
+ bs_adjective: function () {
+ return this.array_element(definitions.bs_adjective);
+ },
+
+ bs_buzz: function () {
+ return this.array_element(definitions.bs_buzz);
+ },
+
+ bs_noun: function () {
+ return this.array_element(definitions.bs_noun);
+ },
+
+ phone_formats: function () {
+ return this.array_element(definitions.phone_formats);
+ },
+
+ domain_suffix: function () {
+ return this.array_element(definitions.domain_suffix);
+ }
+
+};
+
+module.exports = random;
diff --git a/package.json b/package.json
index 1b5b6883..0deb7639 100644
--- a/package.json
+++ b/package.json
@@ -1,14 +1,25 @@
{
"name": "Faker",
"description": "Generate massive amounts of fake contextual data",
- "version": "0.5.0",
+ "version": "0.5.12",
"author": "Marak Squires <[email protected]>",
"repository": {
"type": "git",
- "url": "http://github.com/Marak/Faker.js.git"
+ "url": "http://github.com/Marak/Faker.js.git"
+ },
+ "scripts": {
+ "test": "node_modules/.bin/mocha test/*.*.js"
+ },
+ "devDependencies": {
+ "jshint": "0.9.0",
+ "istanbul": "0.1.25",
+ "mocha": "1.7.4",
+ "node-minify": "*",
+ "optimist" : "0.3.5",
+ "sinon": "1.4.2"
},
"engine": [
- "node >=0.1.90"
+ "node >=0.1.90"
],
- "main": "Faker"
-} \ No newline at end of file
+ "main": "index"
+}
diff --git a/test/address.unit.js b/test/address.unit.js
new file mode 100644
index 00000000..a6e33c0b
--- /dev/null
+++ b/test/address.unit.js
@@ -0,0 +1,293 @@
+if (typeof module !== 'undefined') {
+ var assert = require('assert');
+ var sinon = require('sinon');
+ var Faker = require('../index');
+}
+
+describe("address.js", function () {
+ describe("city()", function () {
+ beforeEach(function () {
+ sinon.spy(Faker.random, 'city_prefix');
+ sinon.spy(Faker.random, 'first_name');
+ sinon.spy(Faker.random, 'last_name');
+ sinon.spy(Faker.random, 'city_suffix');
+ });
+
+ afterEach(function () {
+ Faker.random.number.restore();
+ Faker.random.city_prefix.restore();
+ Faker.random.first_name.restore();
+ Faker.random.last_name.restore();
+ Faker.random.city_suffix.restore();
+ });
+
+ it("occasionally returns prefix + first name + suffix", function () {
+ sinon.stub(Faker.random, 'number').returns(0);
+
+ var city = Faker.Address.city();
+ assert.ok(city);
+
+ assert.ok(Faker.random.city_prefix.calledOnce);
+ assert.ok(Faker.random.first_name.calledOnce);
+ assert.ok(Faker.random.city_suffix.calledOnce);
+ });
+
+ it("occasionally returns prefix + first name", function () {
+ sinon.stub(Faker.random, 'number').returns(1);
+
+ var city = Faker.Address.city();
+ assert.ok(city);
+
+ assert.ok(Faker.random.city_prefix.calledOnce);
+ assert.ok(Faker.random.first_name.calledOnce);
+ assert.ok(!Faker.random.city_suffix.called);
+ });
+
+ it("occasionally returns first name + suffix", function () {
+ sinon.stub(Faker.random, 'number').returns(2);
+
+ var city = Faker.Address.city();
+ assert.ok(city);
+
+ assert.ok(!Faker.random.city_prefix.called);
+ assert.ok(Faker.random.first_name.calledOnce);
+ assert.ok(Faker.random.city_suffix.calledOnce);
+ });
+
+ it("occasionally returns last name + suffix", function () {
+ sinon.stub(Faker.random, 'number').returns(3);
+
+ var city = Faker.Address.city();
+ assert.ok(city);
+
+ assert.ok(!Faker.random.city_prefix.called);
+ assert.ok(!Faker.random.first_name.called);
+ assert.ok(Faker.random.last_name.calledOnce);
+ assert.ok(Faker.random.city_suffix.calledOnce);
+ });
+ });
+
+ describe("streetName()", function () {
+ beforeEach(function () {
+ sinon.spy(Faker.random, 'first_name');
+ sinon.spy(Faker.random, 'last_name');
+ sinon.spy(Faker.random, 'street_suffix');
+ });
+
+ afterEach(function () {
+ Faker.random.number.restore();
+ Faker.random.first_name.restore();
+ Faker.random.last_name.restore();
+ Faker.random.street_suffix.restore();
+ });
+
+ it("occasionally returns last name + suffix", function () {
+ sinon.stub(Faker.random, 'number').returns(0);
+
+ var street_name = Faker.Address.streetName();
+ assert.ok(street_name);
+
+ assert.ok(!Faker.random.first_name.called);
+ assert.ok(Faker.random.last_name.calledOnce);
+ assert.ok(Faker.random.street_suffix.calledOnce);
+ });
+
+ it("occasionally returns first name + suffix", function () {
+ sinon.stub(Faker.random, 'number').returns(1);
+
+ var street_name = Faker.Address.streetName();
+ assert.ok(street_name);
+
+ assert.ok(Faker.random.first_name.calledOnce);
+ assert.ok(!Faker.random.last_name.called);
+ assert.ok(Faker.random.street_suffix.calledOnce);
+ });
+ });
+
+ describe("streetAddress()", function () {
+ beforeEach(function () {
+ sinon.spy(Faker.Address, 'streetName');
+ sinon.spy(Faker.Address, 'secondaryAddress');
+ });
+
+ afterEach(function () {
+ Faker.Address.streetName.restore();
+ Faker.Address.secondaryAddress.restore();
+ });
+
+ it("occasionally returns a 5-digit street number", function () {
+ sinon.stub(Faker.random, 'number').returns(0);
+ var address = Faker.Address.streetAddress();
+ var parts = address.split(' ');
+
+ assert.equal(parts[0].length, 5);
+ assert.ok(Faker.Address.streetName.called);
+
+ Faker.random.number.restore();
+ });
+
+ it("occasionally returns a 4-digit street number", function () {
+ sinon.stub(Faker.random, 'number').returns(1);
+ var address = Faker.Address.streetAddress();
+ var parts = address.split(' ');
+
+ assert.equal(parts[0].length, 4);
+ assert.ok(Faker.Address.streetName.called);
+
+ Faker.random.number.restore();
+ });
+
+ it("occasionally returns a 3-digit street number", function () {
+ sinon.stub(Faker.random, 'number').returns(2);
+ var address = Faker.Address.streetAddress();
+ var parts = address.split(' ');
+
+ assert.equal(parts[0].length, 3);
+ assert.ok(Faker.Address.streetName.called);
+ assert.ok(!Faker.Address.secondaryAddress.called);
+
+ Faker.random.number.restore();
+ });
+
+ context("when useFulladdress is true", function () {
+ it("adds a secondary address to the result", function () {
+ var address = Faker.Address.streetAddress(true);
+ var parts = address.split(' ');
+
+ assert.ok(Faker.Address.secondaryAddress.called);
+ });
+ });
+ });
+
+ describe("secondaryAddress()", function () {
+ it("randomly chooses an Apt or Suite number", function () {
+ sinon.spy(Faker.random, 'array_element');
+
+ var address = Faker.Address.secondaryAddress();
+
+ var expected_array = [
+ 'Apt. ###',
+ 'Suite ###'
+ ];
+
+ assert.ok(address);
+ assert.ok(Faker.random.array_element.calledWith(expected_array));
+ Faker.random.array_element.restore();
+ });
+ });
+
+ describe("brState()", function () {
+ beforeEach(function () {
+ sinon.spy(Faker.random, 'br_state_abbr');
+ sinon.spy(Faker.random, 'br_state');
+ });
+
+ afterEach(function () {
+ Faker.random.br_state_abbr.restore();
+ Faker.random.br_state.restore();
+ });
+
+ context("when useAbbr is true", function () {
+ it("returns a br_state_abbr", function () {
+ var state = Faker.Address.brState(true);
+
+ assert.ok(state);
+ assert.ok(Faker.random.br_state_abbr.called);
+ assert.ok(!Faker.random.br_state.called);
+ });
+ });
+
+ context("when useAbbr is not set", function () {
+ it("returns a br_state", function () {
+ var state = Faker.Address.brState();
+
+ assert.ok(state);
+ assert.ok(!Faker.random.br_state_abbr.called);
+ assert.ok(Faker.random.br_state.called);
+ });
+ });
+ });
+
+ describe("ukCounty()", function () {
+ it("returns random uk_county", function () {
+ sinon.spy(Faker.random, 'uk_county');
+ var county = Faker.Address.ukCounty();
+ assert.ok(county);
+ assert.ok(Faker.random.uk_county.called);
+ Faker.random.uk_county.restore();
+ });
+ });
+
+ describe("ukCountry()", function () {
+ it("returns random uk_country", function () {
+ sinon.spy(Faker.random, 'uk_country');
+ var country = Faker.Address.ukCountry();
+ assert.ok(country);
+ assert.ok(Faker.random.uk_country.called);
+ Faker.random.uk_country.restore();
+ });
+ });
+
+ describe("usState()", function () {
+ beforeEach(function () {
+ sinon.spy(Faker.random, 'us_state_abbr');
+ sinon.spy(Faker.random, 'us_state');
+ });
+
+ afterEach(function () {
+ Faker.random.us_state_abbr.restore();
+ Faker.random.us_state.restore();
+ });
+
+ context("when useAbus is true", function () {
+ it("returns a us_state_abbr", function () {
+ var state = Faker.Address.usState(true);
+
+ assert.ok(state);
+ assert.ok(Faker.random.us_state_abbr.called);
+ assert.ok(!Faker.random.us_state.called);
+ });
+ });
+
+ context("when useAbus is not set", function () {
+ it("returns a us_state", function () {
+ var state = Faker.Address.usState();
+
+ assert.ok(state);
+ assert.ok(!Faker.random.us_state_abbr.called);
+ assert.ok(Faker.random.us_state.called);
+ });
+ });
+ });
+
+ describe("latitude()", function () {
+ it("returns random latitude", function () {
+ for (var i = 0; i < 100; i++) {
+ sinon.spy(Faker.random, 'number');
+ var latitude = Faker.Address.latitude();
+ assert.ok(typeof latitude === 'string');
+ var latitude_float = parseFloat(latitude);
+ assert.ok(latitude_float >= -90.0);
+ assert.ok(latitude_float <= 90.0);
+ assert.ok(Faker.random.number.called);
+ Faker.random.number.restore();
+ }
+ });
+ });
+
+ describe("longitude()", function () {
+ it("returns random longitude", function () {
+ for (var i = 0; i < 100; i++) {
+ sinon.spy(Faker.random, 'number');
+ var longitude = Faker.Address.longitude();
+ assert.ok(typeof longitude === 'string');
+ var longitude_float = parseFloat(longitude);
+ assert.ok(longitude_float >= -180.0);
+ assert.ok(longitude_float <= 180.0);
+ assert.ok(Faker.random.number.called);
+ Faker.random.number.restore();
+ }
+ });
+ });
+
+});
diff --git a/test/all.functional.js b/test/all.functional.js
new file mode 100644
index 00000000..91327214
--- /dev/null
+++ b/test/all.functional.js
@@ -0,0 +1,47 @@
+if (typeof module !== 'undefined') {
+ var assert = require('assert');
+ var sinon = require('sinon');
+ var Faker = require('../index');
+}
+
+// Basic smoke tests to make sure each method is at least implemented and returns a string.
+
+var modules = {
+ Address: [
+ 'city', 'streetName', 'streetAddress', 'secondaryAddress',
+ 'brState', 'ukCountry', 'ukCounty', 'usState', 'zipCode'
+ ],
+
+ Company: ['companyName', 'companySuffix', 'catchPhrase', 'bs'],
+
+ Internet: ['email', 'userName', 'domainName', 'domainWord', 'ip'],
+
+ Lorem: ['words', 'sentence', 'sentences', 'paragraph', 'paragraphs'],
+
+ Name: ['firstName', 'lastName', 'findName'],
+
+ PhoneNumber: ['phoneNumber']
+};
+
+describe("functional tests", function () {
+ Object.keys(modules).forEach(function (module) {
+ describe(module, function () {
+ modules[module].forEach(function (meth) {
+ it(meth + "()", function () {
+ var result = Faker[module][meth]();
+ assert.ok(result);
+ });
+ });
+ });
+ });
+
+ describe("Address", function () {
+ it("zipCodeFormat()", function () {
+ var result = Faker.Address.zipCodeFormat(0);
+ assert.ok(!result.match(/-/));
+
+ result = Faker.Address.zipCodeFormat(1);
+ assert.ok(result.match(/-/));
+ });
+ });
+});
diff --git a/test/browser.unit.html b/test/browser.unit.html
new file mode 100644
index 00000000..375f683c
--- /dev/null
+++ b/test/browser.unit.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Mocha Tests</title>
+ <link rel="stylesheet" href="../node_modules/mocha/mocha.css" />
+</head>
+<body>
+ <div id="mocha"></div>
+ <script src="../node_modules/mocha/mocha.js"></script>
+ <script src="../Faker.js"></script>
+ <script src="./support/chai.js"></script>
+ <script src="./support/sinon-1.5.2.js"></script>
+ <script>assert = chai.assert;</script>
+ <script>mocha.setup('bdd');</script>
+ <script src="all.functional.js"></script>
+ <script src="address.unit.js"></script>
+ <script src="company.unit.js"></script>
+ <script src="helpers.unit.js"></script>
+ <script src="internet.unit.js"></script>
+ <script src="lorem.unit.js"></script>
+ <script src="name.unit.js"></script>
+ <script src="phone_number.unit.js"></script>
+ <script>
+ mocha.run();
+ </script>
+</body>
+</html>
+
diff --git a/test/company.unit.js b/test/company.unit.js
new file mode 100644
index 00000000..0aceac1e
--- /dev/null
+++ b/test/company.unit.js
@@ -0,0 +1,110 @@
+if (typeof module !== 'undefined') {
+ var assert = require('assert');
+ var sinon = require('sinon');
+ var Faker = require('../index');
+}
+
+describe("company.js", function () {
+ describe("companyName()", function () {
+ it("lets you specify the type of name to return", function () {
+ sinon.spy(Faker.random, 'number');
+ var name = Faker.Company.companyName(1);
+
+ assert.ok(name.match(/-/));
+
+ assert.ok(!Faker.random.number.called);
+ Faker.random.number.restore();
+ });
+
+ it("sometimes returns three last names", function () {
+ sinon.spy(Faker.random, 'last_name');
+ sinon.stub(Faker.random, 'number').returns(2);
+ var name = Faker.Company.companyName();
+ var parts = name.split(' ');
+
+ assert.strictEqual(parts.length, 4); // account for word 'and'
+ assert.ok(Faker.random.last_name.calledThrice);
+
+ Faker.random.number.restore();
+ Faker.random.last_name.restore();
+ });
+
+ it("sometimes returns two last names separated by a hyphen", function () {
+ sinon.spy(Faker.random, 'last_name');
+ sinon.stub(Faker.random, 'number').returns(1);
+ var name = Faker.Company.companyName();
+ var parts = name.split('-');
+
+ assert.ok(parts.length >= 2);
+ assert.ok(Faker.random.last_name.calledTwice);
+
+ Faker.random.number.restore();
+ Faker.random.last_name.restore();
+ });
+
+ it("sometimes returns a last name with a company suffix", function () {
+ sinon.spy(Faker.Company, 'companySuffix');
+ sinon.spy(Faker.random, 'last_name');
+ sinon.stub(Faker.random, 'number').returns(0);
+ var name = Faker.Company.companyName();
+ var parts = name.split(' ');
+
+ assert.ok(parts.length >= 2);
+ assert.ok(Faker.random.last_name.calledOnce);
+ assert.ok(Faker.Company.companySuffix.calledOnce);
+
+ Faker.random.number.restore();
+ Faker.random.last_name.restore();
+ Faker.Company.companySuffix.restore();
+ });
+ });
+
+ describe("companySuffix()", function () {
+ it("returns random value from company.suffixes array", function () {
+ var suffix = Faker.Company.companySuffix();
+ assert.ok(Faker.Company.suffixes().indexOf(suffix) !== -1);
+ });
+ });
+
+ describe("catchPhrase()", function () {
+ it("returns phrase comprising of a catch phrase adjective, descriptor, and noun", function () {
+ sinon.spy(Faker.random, 'array_element');
+ sinon.spy(Faker.random, 'catch_phrase_adjective');
+ sinon.spy(Faker.random, 'catch_phrase_descriptor');
+ sinon.spy(Faker.random, 'catch_phrase_noun');
+ var phrase = Faker.Company.catchPhrase();
+
+ assert.ok(phrase.split(' ').length >= 3);
+ assert.ok(Faker.random.array_element.calledThrice);
+ assert.ok(Faker.random.catch_phrase_adjective.calledOnce);
+ assert.ok(Faker.random.catch_phrase_descriptor.calledOnce);
+ assert.ok(Faker.random.catch_phrase_noun.calledOnce);
+
+ Faker.random.array_element.restore();
+ Faker.random.catch_phrase_adjective.restore();
+ Faker.random.catch_phrase_descriptor.restore();
+ Faker.random.catch_phrase_noun.restore();
+ });
+ });
+
+ describe("bs()", function () {
+ it("returns phrase comprising of a BS adjective, buzz, and noun", function () {
+ sinon.spy(Faker.random, 'array_element');
+ sinon.spy(Faker.random, 'bs_adjective');
+ sinon.spy(Faker.random, 'bs_buzz');
+ sinon.spy(Faker.random, 'bs_noun');
+ var bs = Faker.Company.bs();
+
+ assert.ok(typeof bs === 'string');
+ assert.ok(Faker.random.array_element.calledThrice);
+ assert.ok(Faker.random.bs_adjective.calledOnce);
+ assert.ok(Faker.random.bs_buzz.calledOnce);
+ assert.ok(Faker.random.bs_noun.calledOnce);
+
+ Faker.random.array_element.restore();
+ Faker.random.bs_adjective.restore();
+ Faker.random.bs_buzz.restore();
+ Faker.random.bs_noun.restore();
+ });
+ });
+});
diff --git a/test/helpers.unit.js b/test/helpers.unit.js
new file mode 100644
index 00000000..3549099d
--- /dev/null
+++ b/test/helpers.unit.js
@@ -0,0 +1,62 @@
+if (typeof module !== 'undefined') {
+ var assert = require('assert');
+ var sinon = require('sinon');
+ var Faker = require('../index');
+}
+
+describe("helpers.js", function () {
+ describe("replaceSymbolWithNumber()", function () {
+ context("when no symbol passed in", function () {
+ it("uses '#' by default", function () {
+ var num = Faker.Helpers.replaceSymbolWithNumber('#AB');
+ assert.ok(num.match(/\dAB/));
+ });
+ });
+
+ context("when symbol passed in", function () {
+ it("replaces that symbol with integers", function () {
+ var num = Faker.Helpers.replaceSymbolWithNumber('#AB', 'A');
+ assert.ok(num.match(/#\dB/));
+ });
+ });
+ });
+
+ describe("slugify()", function () {
+ it("removes unwanted characters from URI string", function () {
+ assert.equal(Faker.Helpers.slugify("Aiden.Harªann"), "Aiden.Harann");
+ assert.equal(Faker.Helpers.slugify("d'angelo.net"), "dangelo.net");
+ });
+ });
+
+ describe("createCard()", function () {
+ it("returns an object", function () {
+ var card = Faker.Helpers.createCard();
+ assert.ok(typeof card === 'object');
+ });
+ });
+
+ describe("userCard()", function () {
+ it("returns an object", function () {
+ var card = Faker.Helpers.userCard();
+ assert.ok(typeof card === 'object');
+ });
+ });
+
+ // Make sure we keep this function for backward-compatibility.
+ describe("randomNumber()", function () {
+ it("returns an integer", function () {
+ var num = Faker.Helpers.randomNumber();
+ assert.ok(typeof num === 'number');
+ });
+ });
+
+ // Make sure we keep this function for backward-compatibility.
+ describe("randomize()", function () {
+ it("returns a random element from an array", function () {
+ var arr = ['a', 'b', 'c'];
+ var elem = Faker.Helpers.randomize(arr);
+ assert.ok(elem);
+ assert.ok(arr.indexOf(elem) !== -1);
+ });
+ });
+});
diff --git a/test/image.unit.js b/test/image.unit.js
new file mode 100644
index 00000000..046291ad
--- /dev/null
+++ b/test/image.unit.js
@@ -0,0 +1,38 @@
+if (typeof module !== 'undefined') {
+ var assert = require('assert');
+ var sinon = require('sinon');
+ var Faker = require('../index');
+}
+
+describe("image.js", function () {
+ describe("imageUrl()", function () {
+ it("returns a random image url from lorempixel", function () {
+ var imageUrl = Faker.Image.LoremPixel.imageUrl();
+
+ assert.equal(imageUrl, 'http://lorempixel.com/640/480');
+ });
+ it("returns a random image url from lorempixel with width and height", function () {
+ var imageUrl = Faker.Image.LoremPixel.imageUrl(100, 100);
+
+ assert.equal(imageUrl, 'http://lorempixel.com/100/100');
+ });
+ it("returns a random image url in an abstract category", function () {
+ var imageUrl = Faker.Image.LoremPixel.imageUrl(100, 100, 'abstract');
+
+ assert.equal(imageUrl, 'http://lorempixel.com/100/100/abstract');
+ });
+ it("returns a random image url in a category via proxy methods", function () {
+ var nightlife = Faker.Image.LoremPixel.nightlife();
+ assert.equal(nightlife, 'http://lorempixel.com/640/480/nightlife');
+
+ var city = Faker.Image.LoremPixel.city();
+ assert.equal(city, 'http://lorempixel.com/640/480/city');
+
+ var fashion = Faker.Image.LoremPixel.fashion();
+ assert.equal(fashion, 'http://lorempixel.com/640/480/fashion');
+ });
+ it("return a random avatar from UIFaces", function () {
+ assert.notEqual(-1, Faker.Image.UIFaces.avatar().indexOf('s3.amazonaws.com/uifaces/faces'));
+ })
+ });
+});
diff --git a/test/internet.unit.js b/test/internet.unit.js
new file mode 100644
index 00000000..d7d823cf
--- /dev/null
+++ b/test/internet.unit.js
@@ -0,0 +1,85 @@
+if (typeof module !== 'undefined') {
+ var assert = require('assert');
+ var sinon = require('sinon');
+ var Faker = require('../index');
+}
+
+describe("internet.js", function () {
+ describe("email()", function () {
+ it("returns a userName@domainName", function () {
+ sinon.stub(Faker.Internet, 'userName').returns('Aiden.Harªann');
+ sinon.stub(Faker.Internet, 'domainName').returns("ex'ample.net");
+ var email = Faker.Internet.email();
+
+ assert.equal(email, '[email protected]');
+
+ Faker.Internet.userName.restore();
+ Faker.Internet.domainName.restore();
+ });
+ });
+
+ describe("userName()", function () {
+ it("occasionally returns a single firstName", function () {
+ sinon.stub(Faker.random, 'number').returns(0);
+ sinon.spy(Faker.random, 'first_name');
+ var username = Faker.Internet.userName();
+
+ assert.ok(username);
+ assert.ok(Faker.random.first_name.called);
+
+ Faker.random.number.restore();
+ Faker.random.first_name.restore();
+ });
+
+ it("occasionally returns a firstName with a period or hyphen and a lastName", function () {
+ sinon.stub(Faker.random, 'number').returns(1);
+ sinon.spy(Faker.random, 'first_name');
+ sinon.spy(Faker.random, 'last_name');
+ sinon.spy(Faker.random, 'array_element');
+ var username = Faker.Internet.userName();
+
+ assert.ok(username);
+ assert.ok(Faker.random.first_name.called);
+ assert.ok(Faker.random.last_name.called);
+ assert.ok(Faker.random.array_element.calledWith(['.', '_']));
+
+ Faker.random.number.restore();
+ Faker.random.first_name.restore();
+ Faker.random.last_name.restore();
+ });
+ });
+
+ describe("domainName()", function () {
+ it("returns a domainWord plus a random suffix", function () {
+ sinon.stub(Faker.Internet, 'domainWord').returns('bar');
+ sinon.stub(Faker.random, 'domain_suffix').returns('net');
+
+ var domain_name = Faker.Internet.domainName();
+
+ assert.equal(domain_name, 'bar.net');
+
+ Faker.Internet.domainWord.restore();
+ Faker.random.domain_suffix.restore();
+ });
+ });
+
+ describe("domainWord()", function () {
+ it("returns a lower-case firstName", function () {
+ sinon.stub(Faker.random, 'first_name').returns('FOO');
+ var domain_word = Faker.Internet.domainWord();
+
+ assert.ok(domain_word);
+ assert.strictEqual(domain_word, 'foo');
+
+ Faker.random.first_name.restore();
+ });
+ });
+
+ describe("ip()", function () {
+ it("returns a random IP address with four parts", function () {
+ var ip = Faker.Internet.ip();
+ var parts = ip.split('.');
+ assert.equal(parts.length, 4);
+ });
+ });
+});
diff --git a/test/lorem.unit.js b/test/lorem.unit.js
new file mode 100644
index 00000000..d85cce91
--- /dev/null
+++ b/test/lorem.unit.js
@@ -0,0 +1,178 @@
+if (typeof module !== 'undefined') {
+ var assert = require('assert');
+ var sinon = require('sinon');
+ var Faker = require('../index');
+}
+
+describe("lorem.js", function () {
+ describe("words()", function () {
+ beforeEach(function () {
+ sinon.spy(Faker.Helpers, 'shuffle');
+ });
+
+ afterEach(function () {
+ Faker.Helpers.shuffle.restore();
+ });
+
+ context("when no 'num' param passed in", function () {
+ it("returns three words", function () {
+ var words = Faker.Lorem.words();
+
+ assert.ok(Array.isArray(words));
+ assert.equal(words.length, 3);
+ assert.ok(Faker.Helpers.shuffle.called);
+ });
+ });
+
+ context("when 'num' param passed in", function () {
+ it("returns requested number of words", function () {
+ var words = Faker.Lorem.words(7);
+
+ assert.ok(Array.isArray(words));
+ assert.equal(words.length, 7);
+ });
+ });
+ });
+
+ describe("sentence()", function () {
+ context("when no 'wordCount' or 'range' param passed in", function () {
+ it("returns a string of at least three words", function () {
+ sinon.spy(Faker.Lorem, 'words');
+ sinon.stub(Faker.random, 'number').returns(2);
+ var sentence = Faker.Lorem.sentence();
+
+ assert.ok(typeof sentence === 'string');
+ var parts = sentence.split(' ');
+ assert.equal(parts.length, 5); // default 3 plus stubbed 2.
+ assert.ok(Faker.Lorem.words.calledWith(5));
+
+ Faker.Lorem.words.restore();
+ Faker.random.number.restore();
+ });
+ });
+
+ context("when 'wordCount' param passed in", function () {
+ it("returns a string of at least the requested number of words", function () {
+ sinon.spy(Faker.Lorem, 'words');
+ sinon.stub(Faker.random, 'number').returns(2);
+ var sentence = Faker.Lorem.sentence(10);
+
+ assert.ok(typeof sentence === 'string');
+ var parts = sentence.split(' ');
+ assert.equal(parts.length, 12); // requested 10 plus stubbed 2.
+ assert.ok(Faker.Lorem.words.calledWith(12));
+
+ Faker.Lorem.words.restore();
+ Faker.random.number.restore();
+ });
+ });
+
+ context("when 'wordCount' and 'range' params passed in", function () {
+ it("returns a string of at least the requested number of words", function () {
+ sinon.spy(Faker.Lorem, 'words');
+ sinon.stub(Faker.random, 'number').returns(4);
+ var sentence = Faker.Lorem.sentence(10, 4);
+
+ assert.ok(typeof sentence === 'string');
+ var parts = sentence.split(' ');
+ assert.equal(parts.length, 14); // requested 10 plus stubbed 4.
+ assert.ok(Faker.Lorem.words.calledWith(14));
+
+ Faker.Lorem.words.restore();
+ Faker.random.number.restore();
+ });
+ });
+ });
+
+ describe("sentences()", function () {
+ context("when no 'sentenceCount' param passed in", function () {
+ it("returns newline-separated string of three sentences", function () {
+ sinon.spy(Faker.Lorem, 'sentence');
+ var sentences = Faker.Lorem.sentences();
+
+ assert.ok(typeof sentences === 'string');
+ var parts = sentences.split('\n');
+ assert.equal(parts.length, 3);
+ assert.ok(Faker.Lorem.sentence.calledThrice);
+
+ Faker.Lorem.sentence.restore();
+ });
+ });
+
+ context("when 'sentenceCount' param passed in", function () {
+ it("returns newline-separated string of requested number of sentences", function () {
+ sinon.spy(Faker.Lorem, 'sentence');
+ var sentences = Faker.Lorem.sentences(5);
+
+ assert.ok(typeof sentences === 'string');
+ var parts = sentences.split('\n');
+ assert.equal(parts.length, 5);
+
+ Faker.Lorem.sentence.restore();
+ });
+ });
+ });
+
+ describe("paragraph()", function () {
+ context("when no 'wordCount' param passed in", function () {
+ it("returns a string of at least three sentences", function () {
+ sinon.spy(Faker.Lorem, 'sentences');
+ sinon.stub(Faker.random, 'number').returns(2);
+ var paragraph = Faker.Lorem.paragraph();
+
+ assert.ok(typeof paragraph === 'string');
+ var parts = paragraph.split('\n');
+ assert.equal(parts.length, 5); // default 3 plus stubbed 2.
+ assert.ok(Faker.Lorem.sentences.calledWith(5));
+
+ Faker.Lorem.sentences.restore();
+ Faker.random.number.restore();
+ });
+ });
+
+ context("when 'wordCount' param passed in", function () {
+ it("returns a string of at least the requested number of sentences", function () {
+ sinon.spy(Faker.Lorem, 'sentences');
+ sinon.stub(Faker.random, 'number').returns(2);
+ var paragraph = Faker.Lorem.paragraph(10);
+
+ assert.ok(typeof paragraph === 'string');
+ var parts = paragraph.split('\n');
+ assert.equal(parts.length, 12); // requested 10 plus stubbed 2.
+ assert.ok(Faker.Lorem.sentences.calledWith(12));
+
+ Faker.Lorem.sentences.restore();
+ Faker.random.number.restore();
+ });
+ });
+ });
+
+ describe("paragraphs()", function () {
+ context("when no 'paragraphCount' param passed in", function () {
+ it("returns newline-separated string of three paragraphs", function () {
+ sinon.spy(Faker.Lorem, 'paragraph');
+ var paragraphs = Faker.Lorem.paragraphs();
+
+ assert.ok(typeof paragraphs === 'string');
+ var parts = paragraphs.split('\n \r\t');
+ assert.equal(parts.length, 3);
+ assert.ok(Faker.Lorem.paragraph.calledThrice);
+
+ Faker.Lorem.paragraph.restore();
+ });
+ });
+
+ context("when 'paragraphCount' param passed in", function () {
+ it("returns newline-separated string of requested number of paragraphs", function () {
+ sinon.spy(Faker.Lorem, 'paragraph');
+ var paragraphs = Faker.Lorem.paragraphs(5);
+
+ assert.ok(typeof paragraphs === 'string');
+ var parts = paragraphs.split('\n \r\t');
+ assert.equal(parts.length, 5);
+
+ Faker.Lorem.paragraph.restore();
+ });
+ });
+ });
+});
diff --git a/test/mocha.opts b/test/mocha.opts
new file mode 100644
index 00000000..2fc3747d
--- /dev/null
+++ b/test/mocha.opts
@@ -0,0 +1,5 @@
+--reporter spec
+--ui bdd
+--globals state,newBlocks,params,type,__coverage__
+--timeout 6500
+--slow 200
diff --git a/test/name.unit.js b/test/name.unit.js
new file mode 100644
index 00000000..84e0ff90
--- /dev/null
+++ b/test/name.unit.js
@@ -0,0 +1,63 @@
+if (typeof module !== 'undefined') {
+ var assert = require('assert');
+ var sinon = require('sinon');
+ var Faker = require('../index');
+}
+
+describe("name.js", function () {
+ describe("firstName()", function () {
+ it("returns a random name", function () {
+ sinon.stub(Faker.random, 'first_name').returns('foo');
+ var first_name = Faker.Name.firstName();
+
+ assert.equal(first_name, 'foo');
+
+ Faker.random.first_name.restore();
+ });
+ });
+
+ describe("lastName()", function () {
+ it("returns a random name", function () {
+ sinon.stub(Faker.random, 'last_name').returns('foo');
+
+ var last_name = Faker.Name.lastName();
+
+ assert.equal(last_name, 'foo');
+
+ Faker.random.last_name.restore();
+ });
+ });
+
+ describe("findName()", function () {
+ it("usually returns a first name and last name", function () {
+ sinon.stub(Faker.random, 'number').returns(5);
+ var name = Faker.Name.findName();
+ assert.ok(name);
+ var parts = name.split(' ');
+
+ assert.strictEqual(parts.length, 2);
+
+ Faker.random.number.restore();
+ });
+
+ it("occasionally returns a first name and last name with a prefix", function () {
+ sinon.stub(Faker.random, 'number').returns(0);
+ var name = Faker.Name.findName();
+ var parts = name.split(' ');
+
+ assert.ok(parts.length >= 3);
+
+ Faker.random.number.restore();
+ });
+
+ it("occasionally returns a first name and last name with a suffix", function () {
+ sinon.stub(Faker.random, 'number').returns(1);
+ var name = Faker.Name.findName();
+ var parts = name.split(' ');
+
+ assert.ok(parts.length >= 3);
+
+ Faker.random.number.restore();
+ });
+ });
+});
diff --git a/test/phone_number.unit.js b/test/phone_number.unit.js
new file mode 100644
index 00000000..91cb1e69
--- /dev/null
+++ b/test/phone_number.unit.js
@@ -0,0 +1,29 @@
+if (typeof module !== 'undefined') {
+ var assert = require('assert');
+ var sinon = require('sinon');
+ var Faker = require('../index');
+}
+
+describe("phone_number.js", function () {
+ describe("phoneNumber()", function () {
+ it("returns a random phoneNumber with a random format", function () {
+ sinon.spy(Faker.random, 'phone_formats');
+ sinon.spy(Faker.Helpers, 'replaceSymbolWithNumber');
+ var phone_number = Faker.PhoneNumber.phoneNumber();
+
+ assert.ok(phone_number.match(/\d/));
+ assert.ok(Faker.random.phone_formats.called);
+ assert.ok(Faker.Helpers.replaceSymbolWithNumber.called);
+
+ Faker.random.phone_formats.restore();
+ Faker.Helpers.replaceSymbolWithNumber.restore();
+ });
+ });
+
+ describe("phoneNumberFormat()", function () {
+ it("returns phone number with requested format (Array index)", function () {
+ var phone_number = Faker.PhoneNumber.phoneNumberFormat(5);
+ assert.ok(phone_number.match(/\(\d\d\d\)\d\d\d-\d\d\d\d/));
+ });
+ });
+});
diff --git a/test/run.js b/test/run.js
new file mode 100755
index 00000000..d577de9a
--- /dev/null
+++ b/test/run.js
@@ -0,0 +1,68 @@
+#!/usr/bin/env node
+process.env.NODE_ENV = 'test';
+
+var fs = require('fs');
+var Mocha = require('mocha');
+var optimist = require('optimist');
+var walk_dir = require('./support/walk_dir');
+
+var argv = optimist
+ .usage("Usage: $0 -t [types] --reporter [reporter] --timeout [timeout]")
+ .default({types: 'unit,functional', reporter: 'spec', timeout: 6000})
+ .describe('types', 'The types of tests to run, separated by commas. E.g., unit,functional,acceptance')
+ .describe('reporter', 'The mocha test reporter to use.')
+ .describe('timeout', 'The mocha timeout to use per test (ms).')
+ .boolean('help')
+ .alias('types', 'T')
+ .alias('timeout', 't')
+ .alias('reporter', 'R')
+ .alias('help', 'h')
+ .argv;
+
+var mocha = new Mocha({timeout: argv.timeout, reporter: argv.reporter, ui: 'bdd'});
+
+var valid_test_types = ['unit', 'functional', 'acceptance', 'integration'];
+var requested_types = argv.types.split(',');
+var types_to_use = [];
+
+valid_test_types.forEach(function (valid_test_type) {
+ if (requested_types.indexOf(valid_test_type) !== -1) {
+ types_to_use.push(valid_test_type);
+ }
+});
+
+if (argv.help || types_to_use.length === 0) {
+ console.log('\n' + optimist.help());
+ process.exit();
+}
+
+var is_valid_file = function (file) {
+ for (var i = 0; i < types_to_use.length; i++) {
+ var test_type = types_to_use[i];
+ var ext = test_type + ".js";
+
+ if (file.indexOf(ext) !== -1) {
+ return true;
+ }
+ }
+
+ return false;
+};
+
+function run(cb) {
+ walk_dir.walk('test', is_valid_file, function (err, files) {
+ if (err) { return cb(err); }
+
+ files.forEach(function (file) {
+ mocha.addFile(file);
+ });
+
+ cb();
+ });
+}
+
+run(function (err) {
+ mocha.run(function (failures) {
+ process.exit(failures);
+ });
+});
diff --git a/test/support/chai.js b/test/support/chai.js
new file mode 100644
index 00000000..43fbf644
--- /dev/null
+++ b/test/support/chai.js
@@ -0,0 +1,3403 @@
+!function (name, definition) {
+ if (typeof define == 'function' && typeof define.amd == 'object') define(definition);
+ else this[name] = definition();
+}('chai', function () {
+
+// CommonJS require()
+
+function require(p){
+ var path = require.resolve(p)
+ , mod = require.modules[path];
+ if (!mod) throw new Error('failed to require "' + p + '"');
+ if (!mod.exports) {
+ mod.exports = {};
+ mod.call(mod.exports, mod, mod.exports, require.relative(path));
+ }
+ return mod.exports;
+ }
+
+require.modules = {};
+
+require.resolve = function (path){
+ var orig = path
+ , reg = path + '.js'
+ , index = path + '/index.js';
+ return require.modules[reg] && reg
+ || require.modules[index] && index
+ || orig;
+ };
+
+require.register = function (path, fn){
+ require.modules[path] = fn;
+ };
+
+require.relative = function (parent) {
+ return function(p){
+ if ('.' != p[0]) return require(p);
+
+ var path = parent.split('/')
+ , segs = p.split('/');
+ path.pop();
+
+ for (var i = 0; i < segs.length; i++) {
+ var seg = segs[i];
+ if ('..' == seg) path.pop();
+ else if ('.' != seg) path.push(seg);
+ }
+
+ return require(path.join('/'));
+ };
+ };
+
+
+require.register("assertion.js", function(module, exports, require){
+/*!
+ * chai
+ * http://chaijs.com
+ * Copyright(c) 2011-2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+
+/*!
+ * Module dependencies.
+ */
+
+var AssertionError = require('./browser/error')
+ , toString = Object.prototype.toString
+ , util = require('./utils')
+ , flag = util.flag;
+
+/*!
+ * Module export.
+ */
+
+module.exports = Assertion;
+
+
+/*!
+ * Assertion Constructor
+ *
+ * Creates object for chaining.
+ *
+ * @api private
+ */
+
+function Assertion (obj, msg, stack) {
+ flag(this, 'ssfi', stack || arguments.callee);
+ flag(this, 'object', obj);
+ flag(this, 'message', msg);
+}
+
+/*!
+ * ### Assertion.includeStack
+ *
+ * User configurable property, influences whether stack trace
+ * is included in Assertion error message. Default of false
+ * suppresses stack trace in the error message
+ *
+ * Assertion.includeStack = true; // enable stack on error
+ *
+ * @api public
+ */
+
+Assertion.includeStack = false;
+
+Assertion.addProperty = function (name, fn) {
+ util.addProperty(this.prototype, name, fn);
+};
+
+Assertion.addMethod = function (name, fn) {
+ util.addMethod(this.prototype, name, fn);
+};
+
+Assertion.addChainableMethod = function (name, fn, chainingBehavior) {
+ util.addChainableMethod(this.prototype, name, fn, chainingBehavior);
+};
+
+Assertion.overwriteProperty = function (name, fn) {
+ util.overwriteProperty(this.prototype, name, fn);
+};
+
+Assertion.overwriteMethod = function (name, fn) {
+ util.overwriteMethod(this.prototype, name, fn);
+};
+
+/*!
+ * ### .assert(expression, message, negateMessage, expected, actual)
+ *
+ * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.
+ *
+ * @name assert
+ * @param {Philosophical} expression to be tested
+ * @param {String} message to display if fails
+ * @param {String} negatedMessage to display if negated expression fails
+ * @param {Mixed} expected value (remember to check for negation)
+ * @param {Mixed} actual (optional) will default to `this.obj`
+ * @api private
+ */
+
+Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual) {
+ var msg = util.getMessage(this, arguments)
+ , actual = util.getActual(this, arguments)
+ , ok = util.test(this, arguments);
+
+ if (!ok) {
+ throw new AssertionError({
+ message: msg
+ , actual: actual
+ , expected: expected
+ , stackStartFunction: (Assertion.includeStack) ? this.assert : flag(this, 'ssfi')
+ });
+ }
+};
+
+/*!
+ *
+ * ### ._obj
+ *
+ * Quick reference to stored `actual` value for plugin developers.
+ *
+ * @api private
+ */
+
+Object.defineProperty(Assertion.prototype, '_obj',
+ { get: function () {
+ return flag(this, 'object');
+ }
+ , set: function (val) {
+ flag(this, 'object', val);
+ }
+});
+
+/**
+ * ### Language Chains
+ *
+ * The following are provide as chainable getters to
+ * improve the readability of your assertions. They
+ * do not provide an testing capability unless they
+ * have been overwritten by a plugin.
+ *
+ * **Chains**
+ *
+ * - to
+ * - be
+ * - been
+ * - is
+ * - and
+ * - have
+ * - with
+ *
+ * @name language chains
+ * @api public
+ */
+
+[ 'to', 'be', 'been'
+, 'is', 'and', 'have'
+, 'with' ].forEach(function (chain) {
+ Object.defineProperty(Assertion.prototype, chain,
+ { get: function () {
+ return this;
+ }
+ , configurable: true
+ });
+});
+
+/**
+ * ### .not
+ *
+ * Negates any of assertions following in the chain.
+ *
+ * expect(foo).to.not.equal('bar');
+ * expect(goodFn).to.not.throw(Error);
+ * expect({ foo: 'baz' }).to.have.property('foo')
+ * .and.not.equal('bar');
+ *
+ * @name not
+ * @api public
+ */
+
+Object.defineProperty(Assertion.prototype, 'not',
+ { get: function () {
+ flag(this, 'negate', true);
+ return this;
+ }
+ , configurable: true
+});
+
+/**
+ * ### .deep
+ *
+ * Sets the `deep` flag, later used by the `equal` and
+ * `property` assertions.
+ *
+ * expect(foo).to.deep.equal({ bar: 'baz' });
+ * expect({ foo: { bar: { baz: 'quux' } } })
+ * .to.have.deep.property('foo.bar.baz', 'quux');
+ *
+ * @name deep
+ * @api public
+ */
+
+Object.defineProperty(Assertion.prototype, 'deep',
+ { get: function () {
+ flag(this, 'deep', true);
+ return this;
+ }
+ , configurable: true
+});
+
+/**
+ * ### .a(type)
+ *
+ * The `a` and `an` assertions are aliases that can be
+ * used either as language chains or to assert a value's
+ * type (as revealed by `Object.prototype.toString`).
+ *
+ * // typeof
+ * expect('test').to.be.a('string');
+ * expect({ foo: 'bar' }).to.be.an('object');
+ * expect(null).to.be.a('null');
+ * expect(undefined).to.be.an('undefined');
+ *
+ * // language chain
+ * expect(foo).to.be.an.instanceof(Foo);
+ *
+ * @name a
+ * @alias an
+ * @param {String} type
+ * @api public
+ */
+
+function an(type) {
+ var obj = flag(this, 'object')
+ , klassStart = type.charAt(0).toUpperCase()
+ , klass = klassStart + type.slice(1)
+ , article = ~[ 'A', 'E', 'I', 'O', 'U' ].indexOf(klassStart) ? 'an ' : 'a ';
+
+ this.assert(
+ '[object ' + klass + ']' === toString.call(obj)
+ , 'expected #{this} to be ' + article + type
+ , 'expected #{this} not to be ' + article + type
+ , '[object ' + klass + ']'
+ , toString.call(obj)
+ );
+}
+
+Assertion.addChainableMethod('an', an);
+Assertion.addChainableMethod('a', an);
+
+/**
+ * ### .include(value)
+ *
+ * The `include` and `contain` assertions can be used as either property
+ * based language chains or as methods to assert the inclusion of an object
+ * in an array or a substring in a string. When used as language chains,
+ * they toggle the `contain` flag for the `keys` assertion.
+ *
+ * expect([1,2,3]).to.include(2);
+ * expect('foobar').to.contain('foo');
+ * expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');
+ *
+ * @name include
+ * @alias contain
+ * @param {Object|String|Number} obj
+ * @api public
+ */
+
+function includeChainingBehavior () {
+ flag(this, 'contains', true);
+}
+
+function include (val) {
+ var obj = flag(this, 'object')
+ this.assert(
+ ~obj.indexOf(val)
+ , 'expected #{this} to include ' + util.inspect(val)
+ , 'expected #{this} to not include ' + util.inspect(val));
+}
+
+Assertion.addChainableMethod('include', include, includeChainingBehavior);
+Assertion.addChainableMethod('contain', include, includeChainingBehavior);
+
+/**
+ * ### .ok
+ *
+ * Asserts that the target is truthy.
+ *
+ * expect('everthing').to.be.ok;
+ * expect(1).to.be.ok;
+ * expect(false).to.not.be.ok;
+ * expect(undefined).to.not.be.ok;
+ * expect(null).to.not.be.ok;
+ *
+ * @name ok
+ * @api public
+ */
+
+Object.defineProperty(Assertion.prototype, 'ok',
+ { get: function () {
+ this.assert(
+ flag(this, 'object')
+ , 'expected #{this} to be truthy'
+ , 'expected #{this} to be falsy');
+
+ return this;
+ }
+ , configurable: true
+});
+
+/**
+ * ### .true
+ *
+ * Asserts that the target is `true`.
+ *
+ * expect(true).to.be.true;
+ * expect(1).to.not.be.true;
+ *
+ * @name true
+ * @api public
+ */
+
+Object.defineProperty(Assertion.prototype, 'true',
+ { get: function () {
+ this.assert(
+ true === flag(this, 'object')
+ , 'expected #{this} to be true'
+ , 'expected #{this} to be false'
+ , this.negate ? false : true
+ );
+
+ return this;
+ }
+ , configurable: true
+});
+
+/**
+ * ### .false
+ *
+ * Asserts that the target is `false`.
+ *
+ * expect(false).to.be.false;
+ * expect(0).to.not.be.false;
+ *
+ * @name false
+ * @api public
+ */
+
+Object.defineProperty(Assertion.prototype, 'false',
+ { get: function () {
+ this.assert(
+ false === flag(this, 'object')
+ , 'expected #{this} to be false'
+ , 'expected #{this} to be true'
+ , this.negate ? true : false
+ );
+
+ return this;
+ }
+ , configurable: true
+});
+
+/**
+ * ### .null
+ *
+ * Asserts that the target is `null`.
+ *
+ * expect(null).to.be.null;
+ * expect(undefined).not.to.be.null;
+ *
+ * @name null
+ * @api public
+ */
+
+Object.defineProperty(Assertion.prototype, 'null',
+ { get: function () {
+ this.assert(
+ null === flag(this, 'object')
+ , 'expected #{this} to be null'
+ , 'expected #{this} not to be null'
+ , this.negate ? false : true
+ );
+
+ return this;
+ }
+ , configurable: true
+});
+
+/**
+ * ### .undefined
+ *
+ * Asserts that the target is `undefined`.
+ *
+ * expect(undefined).to.be.undefined;
+ * expect(null).to.not.be.undefined;
+ *
+ * @name undefined
+ * @api public
+ */
+
+Object.defineProperty(Assertion.prototype, 'undefined',
+ { get: function () {
+ this.assert(
+ undefined === flag(this, 'object')
+ , 'expected #{this} to be undefined'
+ , 'expected #{this} not to be undefined'
+ , this.negate ? false : true
+ );
+
+ return this;
+ }
+ , configurable: true
+});
+
+/**
+ * ### .exist
+ *
+ * Asserts that the target is neither `null` nor `undefined`.
+ *
+ * var foo = 'hi'
+ * , bar = null
+ * , baz;
+ *
+ * expect(foo).to.exist;
+ * expect(bar).to.not.exist;
+ * expect(baz).to.not.exist;
+ *
+ * @name exist
+ * @api public
+ */
+
+Object.defineProperty(Assertion.prototype, 'exist',
+ { get: function () {
+ this.assert(
+ null != flag(this, 'object')
+ , 'expected #{this} to exist'
+ , 'expected #{this} to not exist'
+ );
+
+ return this;
+ }
+ , configurable: true
+});
+
+/**
+ * ### .empty
+ *
+ * Asserts that the target's length is `0`. For arrays, it checks
+ * the `length` property. For objects, it gets the count of
+ * enumerable keys.
+ *
+ * expect([]).to.be.empty;
+ * expect('').to.be.empty;
+ * expect({}).to.be.empty;
+ *
+ * @name empty
+ * @api public
+ */
+
+Object.defineProperty(Assertion.prototype, 'empty',
+ { get: function () {
+ var obj = flag(this, 'object')
+ , expected = obj;
+
+ if (Array.isArray(obj) || 'string' === typeof object) {
+ expected = obj.length;
+ } else if (typeof obj === 'object') {
+ expected = Object.keys(obj).length;
+ }
+
+ this.assert(
+ !expected
+ , 'expected #{this} to be empty'
+ , 'expected #{this} not to be empty');
+
+ return this;
+ }
+ , configurable: true
+});
+
+/**
+ * ### .arguments
+ *
+ * Asserts that the target is an arguments object.
+ *
+ * function test () {
+ * expect(arguments).to.be.arguments;
+ * }
+ *
+ * @name arguments
+ * @alias Arguments
+ * @api public
+ */
+
+function checkArguments () {
+ var obj = flag(this, 'object')
+ , type = Object.prototype.toString.call(obj);
+ this.assert(
+ '[object Arguments]' === type
+ , 'expected #{this} to be arguments but got ' + type
+ , 'expected #{this} to not be arguments'
+ );
+}
+
+Assertion.addProperty('arguments', checkArguments);
+Assertion.addProperty('Arguments', checkArguments);
+
+/**
+ * ### .equal(value)
+ *
+ * Asserts that the target is strictly equal (`===`) to `value`.
+ * Alternately, if the `deep` flag is set, asserts that
+ * the target is deeply equal to `value`.
+ *
+ * expect('hello').to.equal('hello');
+ * expect(42).to.equal(42);
+ * expect(1).to.not.equal(true);
+ * expect({ foo: 'bar' }).to.not.equal({ foo: 'bar' });
+ * expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });
+ *
+ * @name equal
+ * @param {Mixed} value
+ * @api public
+ */
+
+Assertion.prototype.equal = function (val) {
+ var obj = flag(this, 'object');
+ if (flag(this, 'deep')) {
+ return this.eql(val);
+ } else {
+ this.assert(
+ val === obj
+ , 'expected #{this} to equal #{exp}'
+ , 'expected #{this} to not equal #{exp}'
+ , val);
+ }
+
+ return this;
+};
+
+/**
+ * ### .eql(value)
+ *
+ * Asserts that the target is deeply equal to `value`.
+ *
+ * expect({ foo: 'bar' }).to.eql({ foo: 'bar' });
+ * expect([ 1, 2, 3 ]).to.eql([ 1, 2, 3 ]);
+ *
+ * @name eql
+ * @param {Mixed} value
+ * @api public
+ */
+
+Assertion.prototype.eql = function (obj) {
+ this.assert(
+ util.eql(obj, flag(this, 'object'))
+ , 'expected #{this} to deeply equal #{exp}'
+ , 'expected #{this} to not deeply equal #{exp}'
+ , obj );
+
+ return this;
+};
+
+/**
+ * ### .above(value)
+ *
+ * Asserts that the target is greater than `value`.
+ *
+ * expect(10).to.be.above(5);
+ *
+ * @name above
+ * @alias gt
+ * @param {Number} value
+ * @api public
+ */
+
+Assertion.prototype.above = function (val) {
+ this.assert(
+ flag(this, 'object') > val
+ , 'expected #{this} to be above ' + val
+ , 'expected #{this} to be below ' + val);
+
+ return this;
+};
+
+/**
+ * ### .below(value)
+ *
+ * Asserts that the target is less than `value`.
+ *
+ * expect(5).to.be.below(10);
+ *
+ * @name below
+ * @alias lt
+ * @param {Number} value
+ * @api public
+ */
+
+Assertion.prototype.below = function (val) {
+ this.assert(
+ flag(this, 'object') < val
+ , 'expected #{this} to be below ' + val
+ , 'expected #{this} to be above ' + val);
+
+ return this;
+};
+
+/**
+ * ### .within(start, finish)
+ *
+ * Asserts that the target is within a range.
+ *
+ * expect(7).to.be.within(5,10);
+ *
+ * @name within
+ * @param {Number} start lowerbound inclusive
+ * @param {Number} finish upperbound inclusive
+ * @api public
+ */
+
+Assertion.prototype.within = function (start, finish) {
+ var obj = flag(this, 'object')
+ , range = start + '..' + finish;
+
+ this.assert(
+ obj >= start && obj <= finish
+ , 'expected #{this} to be within ' + range
+ , 'expected #{this} to not be within ' + range);
+
+ return this;
+};
+
+/**
+ * ### .instanceof(constructor)
+ *
+ * Asserts that the target is an instance of `constructor`.
+ *
+ * var Tea = function (name) { this.name = name; }
+ * , Chai = new Tea('chai');
+ *
+ * expect(Chai).to.be.an.instanceof(Tea);
+ * expect([ 1, 2, 3 ]).to.be.instanceof(Array);
+ *
+ * @name instanceof
+ * @param {Constructor} constructor
+ * @alias instanceOf
+ * @api public
+ */
+
+Assertion.prototype.instanceOf = function (constructor) {
+ var name = util.getName(constructor);
+ this.assert(
+ flag(this, 'object') instanceof constructor
+ , 'expected #{this} to be an instance of ' + name
+ , 'expected #{this} to not be an instance of ' + name);
+
+ return this;
+};
+
+/**
+ * ### .property(name, [value])
+ *
+ * Asserts that the target has a property `name`, optionally asserting that
+ * the value of that property is strictly equal to `value`.
+ * If the `deep` flag is set, you can use dot- and bracket-notation for deep
+ * references into objects and arrays.
+ *
+ * // simple referencing
+ * var obj = { foo: 'bar' };
+ * expect(obj).to.have.property('foo');
+ * expect(obj).to.have.property('foo', 'bar');
+ * expect(obj).to.have.property('foo').to.be.a('string');
+ *
+ * // deep referencing
+ * var deepObj = {
+ * green: { tea: 'matcha' }
+ * , teas: [ 'chai', 'matcha', { tea: 'konacha' } ]
+ * };
+
+ * expect(deepObj).to.have.deep.property('green.tea', 'matcha');
+ * expect(deepObj).to.have.deep.property('teas[1]', 'matcha');
+ * expect(deepObj).to.have.deep.property('teas[2].tea', 'konacha');
+ *
+ * @name property
+ * @param {String} name
+ * @param {Mixed} value (optional)
+ * @returns value of property for chaining
+ * @api public
+ */
+
+Assertion.prototype.property = function (name, val) {
+ var obj = flag(this, 'object')
+ , value = flag(this, 'deep') ? util.getPathValue(name, obj) : obj[name]
+ , descriptor = flag(this, 'deep') ? 'deep property ' : 'property '
+ , negate = flag(this, 'negate');
+
+ if (negate && undefined !== val) {
+ if (undefined === value) {
+ throw new Error(util.inspect(obj) + ' has no ' + descriptor + util.inspect(name));
+ }
+ } else {
+ this.assert(
+ undefined !== value
+ , 'expected #{this} to have a ' + descriptor + util.inspect(name)
+ , 'expected #{this} to not have ' + descriptor + util.inspect(name));
+ }
+
+ if (undefined !== val) {
+ this.assert(
+ val === value
+ , 'expected #{this} to have a ' + descriptor + util.inspect(name) + ' of #{exp}, but got #{act}'
+ , 'expected #{this} to not have a ' + descriptor + util.inspect(name) + ' of #{act}'
+ , val
+ , value
+ );
+ }
+
+ flag(this, 'object', value);
+ return this;
+};
+
+/**
+ * ### .ownProperty(name)
+ *
+ * Asserts that the target has an own property `name`.
+ *
+ * expect('test').to.have.ownProperty('length');
+ *
+ * @name ownProperty
+ * @alias haveOwnProperty
+ * @param {String} name
+ * @api public
+ */
+
+Assertion.prototype.ownProperty = function (name) {
+ var obj = flag(this, 'object');
+ this.assert(
+ obj.hasOwnProperty(name)
+ , 'expected #{this} to have own property ' + util.inspect(name)
+ , 'expected #{this} to not have own property ' + util.inspect(name));
+ return this;
+};
+
+/**
+ * ### .length(value)
+ *
+ * Asserts that the target's `length` property has the expected value.
+ *
+ * expect([1,2,3]).to.have.length(3);
+ * expect('foobar').to.have.length(6);
+ *
+ * @name length
+ * @alias lengthOf
+ * @param {Number} length
+ * @api public
+ */
+
+Assertion.prototype.length = function (n) {
+ var obj = flag(this, 'object');
+ new Assertion(obj).to.have.property('length');
+ var len = obj.length;
+
+ this.assert(
+ len == n
+ , 'expected #{this} to have a length of #{exp} but got #{act}'
+ , 'expected #{this} to not have a length of #{act}'
+ , n
+ , len
+ );
+
+ return this;
+};
+
+/**
+ * ### .match(regexp)
+ *
+ * Asserts that the target matches a regular expression.
+ *
+ * expect('foobar').to.match(/^foo/);
+ *
+ * @name match
+ * @param {RegExp} RegularExpression
+ * @api public
+ */
+
+Assertion.prototype.match = function (re) {
+ var obj = flag(this, 'object');
+ this.assert(
+ re.exec(obj)
+ , 'expected #{this} to match ' + re
+ , 'expected #{this} not to match ' + re);
+
+ return this;
+};
+
+
+/**
+ * ### .string(string)
+ *
+ * Asserts that the string target contains another string.
+ *
+ * expect('foobar').to.have.string('bar');
+ *
+ * @name string
+ * @param {String} string
+ * @api public
+ */
+
+Assertion.prototype.string = function (str) {
+ var obj = flag(this, 'object');
+ new Assertion(obj).is.a('string');
+
+ this.assert(
+ ~obj.indexOf(str)
+ , 'expected #{this} to contain ' + util.inspect(str)
+ , 'expected #{this} to not contain ' + util.inspect(str));
+
+ return this;
+};
+
+/**
+ * ### .keys(key1, [key2], [...])
+ *
+ * Asserts that the target has exactly the given keys, or
+ * asserts the inclusion of some keys when using the
+ * `include` or `contain` modifiers.
+ *
+ * expect({ foo: 1, bar: 2 }).to.have.keys(['foo', 'bar']);
+ * expect({ foo: 1, bar: 2, baz: 3 }).to.contain.keys('foo', 'bar');
+ *
+ * @name keys
+ * @alias key
+ * @param {String...|Array} keys
+ * @api public
+ */
+
+Assertion.prototype.keys = function(keys) {
+ var obj = flag(this, 'object')
+ , str
+ , ok = true;
+
+ keys = keys instanceof Array
+ ? keys
+ : Array.prototype.slice.call(arguments);
+
+ if (!keys.length) throw new Error('keys required');
+
+ var actual = Object.keys(obj)
+ , len = keys.length;
+
+ // Inclusion
+ ok = keys.every(function(key){
+ return ~actual.indexOf(key);
+ });
+
+ // Strict
+ if (!flag(this, 'negate') && !flag(this, 'contains')) {
+ ok = ok && keys.length == actual.length;
+ }
+
+ // Key string
+ if (len > 1) {
+ keys = keys.map(function(key){
+ return util.inspect(key);
+ });
+ var last = keys.pop();
+ str = keys.join(', ') + ', and ' + last;
+ } else {
+ str = util.inspect(keys[0]);
+ }
+
+ // Form
+ str = (len > 1 ? 'keys ' : 'key ') + str;
+
+ // Have / include
+ str = (flag(this, 'contains') ? 'contain ' : 'have ') + str;
+
+ // Assertion
+ this.assert(
+ ok
+ , 'expected #{this} to ' + str
+ , 'expected #{this} to not ' + str
+ , keys
+ , Object.keys(obj)
+ );
+
+ return this;
+}
+
+/**
+ * ### .throw(constructor)
+ *
+ * Asserts that the function target will throw a specific error, or specific type of error
+ * (as determined using `instanceof`), optionally with a RegExp or string inclusion test
+ * for the error's message.
+ *
+ * var err = new ReferenceError('This is a bad function.');
+ * var fn = function () { throw err; }
+ * expect(fn).to.throw(ReferenceError);
+ * expect(fn).to.throw(Error);
+ * expect(fn).to.throw(/bad function/);
+ * expect(fn).to.not.throw('good function');
+ * expect(fn).to.throw(ReferenceError, /bad function/);
+ * expect(fn).to.throw(err);
+ * expect(fn).to.not.throw(new RangeError('Out of range.'));
+ *
+ * Please note that when a throw expectation is negated, it will check each
+ * parameter independently, starting with error constructor type. The appropriate way
+ * to check for the existence of a type of error but for a message that does not match
+ * is to use `and`.
+ *
+ * expect(fn).to.throw(ReferenceError)
+ * .and.not.throw(/good function/);
+ *
+ * @name throw
+ * @alias throws
+ * @alias Throw
+ * @param {ErrorConstructor} constructor
+ * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
+ * @api public
+ */
+
+Assertion.prototype.Throw = function (constructor, msg) {
+ var obj = flag(this, 'object');
+ new Assertion(obj).is.a('function');
+
+ var thrown = false
+ , desiredError = null
+ , name = null;
+
+ if (arguments.length === 0) {
+ msg = null;
+ constructor = null;
+ } else if (constructor && (constructor instanceof RegExp || 'string' === typeof constructor)) {
+ msg = constructor;
+ constructor = null;
+ } else if (constructor && constructor instanceof Error) {
+ desiredError = constructor;
+ constructor = null;
+ msg = null;
+ } else if (typeof constructor === 'function') {
+ name = (new constructor()).name;
+ } else {
+ constructor = null;
+ }
+
+ try {
+ obj();
+ } catch (err) {
+ // first, check desired error
+ if (desiredError) {
+ this.assert(
+ err === desiredError
+ , 'expected #{this} to throw ' + util.inspect(desiredError) + ' but ' + util.inspect(err) + ' was thrown'
+ , 'expected #{this} to not throw ' + util.inspect(desiredError)
+ );
+ return this;
+ }
+ // next, check constructor
+ if (constructor) {
+ this.assert(
+ err instanceof constructor
+ , 'expected #{this} to throw ' + name + ' but a ' + err.name + ' was thrown'
+ , 'expected #{this} to not throw ' + name );
+ if (!msg) return this;
+ }
+ // next, check message
+ if (err.message && msg && msg instanceof RegExp) {
+ this.assert(
+ msg.exec(err.message)
+ , 'expected #{this} to throw error matching ' + msg + ' but got ' + util.inspect(err.message)
+ , 'expected #{this} to throw error not matching ' + msg
+ );
+ return this;
+ } else if (err.message && msg && 'string' === typeof msg) {
+ this.assert(
+ ~err.message.indexOf(msg)
+ , 'expected #{this} to throw error including #{exp} but got #{act}'
+ , 'expected #{this} to throw error not including #{act}'
+ , msg
+ , err.message
+ );
+ return this;
+ } else {
+ thrown = true;
+ }
+ }
+
+ var expectedThrown = name ? name : desiredError ? util.inspect(desiredError) : 'an error';
+
+ this.assert(
+ thrown === true
+ , 'expected #{this} to throw ' + expectedThrown
+ , 'expected #{this} to not throw ' + expectedThrown);
+
+ return this;
+};
+
+/**
+ * ### .respondTo(method)
+ *
+ * Asserts that the object or class target will respond to a method.
+ *
+ * Klass.prototype.bar = function(){};
+ * expect(Klass).to.respondTo('bar');
+ * expect(obj).to.respondTo('bar');
+ *
+ * To check if a constructor will respond to a static function,
+ * set the `itself` flag.
+ *
+ * Klass.baz = function(){};
+ * expect(Klass).itself.to.respondTo('baz');
+ *
+ * @name respondTo
+ * @param {String} method
+ * @api public
+ */
+
+Assertion.prototype.respondTo = function (method) {
+ var obj = flag(this, 'object')
+ , itself = flag(this, 'itself')
+ , context = ('function' === typeof obj && !itself)
+ ? obj.prototype[method]
+ : obj[method];
+
+ this.assert(
+ 'function' === typeof context
+ , 'expected #{this} to respond to ' + util.inspect(method)
+ , 'expected #{this} to not respond to ' + util.inspect(method)
+ , 'function'
+ , typeof context
+ );
+
+ return this;
+};
+
+/**
+ * ### .itself
+ *
+ * Sets the `itself` flag, later used by the `respondTo` assertion.
+ *
+ * function Foo() {}
+ * Foo.bar = function() {}
+ * Foo.prototype.baz = function() {}
+ *
+ * expect(Foo).itself.to.respondTo('bar');
+ * expect(Foo).itself.not.to.respondTo('baz');
+ *
+ * @name itself
+ * @api public
+ */
+Object.defineProperty(Assertion.prototype, 'itself',
+ { get: function () {
+ flag(this, 'itself', true);
+ return this;
+ }
+ , configurable: true
+});
+
+/**
+ * ### .satisfy(method)
+ *
+ * Asserts that the target passes a given truth test.
+ *
+ * expect(1).to.satisfy(function(num) { return num > 0; });
+ *
+ * @name satisfy
+ * @param {Function} matcher
+ * @api public
+ */
+
+Assertion.prototype.satisfy = function (matcher) {
+ var obj = flag(this, 'object');
+ this.assert(
+ matcher(obj)
+ , 'expected #{this} to satisfy ' + util.inspect(matcher)
+ , 'expected #{this} to not satisfy' + util.inspect(matcher)
+ , this.negate ? false : true
+ , matcher(obj)
+ );
+
+ return this;
+};
+
+/**
+ * ### .closeTo(expected, delta)
+ *
+ * Asserts that the target is equal `expected`, to within a +/- `delta` range.
+ *
+ * expect(1.5).to.be.closeTo(1, 0.5);
+ *
+ * @name closeTo
+ * @param {Number} expected
+ * @param {Number} delta
+ * @api public
+ */
+
+Assertion.prototype.closeTo = function (expected, delta) {
+ var obj = flag(this, 'object');
+ this.assert(
+ (obj - delta === expected) || (obj + delta === expected)
+ , 'expected #{this} to be close to ' + expected + ' +/- ' + delta
+ , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta);
+
+ return this;
+};
+
+/*!
+ * Aliases.
+ */
+
+(function alias(name, as){
+ Assertion.prototype[as] = Assertion.prototype[name];
+ return alias;
+})
+('equal', 'eq')
+('above', 'gt')
+('below', 'lt')
+('length', 'lengthOf')
+('keys', 'key')
+('ownProperty', 'haveOwnProperty')
+('above', 'greaterThan')
+('below', 'lessThan')
+('Throw', 'throws')
+('Throw', 'throw')
+('instanceOf', 'instanceof');
+
+}); // module: assertion.js
+
+require.register("browser/error.js", function(module, exports, require){
+/*!
+ * chai
+ * Copyright(c) 2011-2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+module.exports = AssertionError;
+
+function AssertionError (options) {
+ options = options || {};
+ this.message = options.message;
+ this.actual = options.actual;
+ this.expected = options.expected;
+ this.operator = options.operator;
+
+ if (options.stackStartFunction && Error.captureStackTrace) {
+ var stackStartFunction = options.stackStartFunction;
+ Error.captureStackTrace(this, stackStartFunction);
+ }
+}
+
+AssertionError.prototype = Object.create(Error.prototype);
+AssertionError.prototype.name = 'AssertionError';
+AssertionError.prototype.constructor = AssertionError;
+
+AssertionError.prototype.toString = function() {
+ return this.message;
+};
+
+}); // module: browser/error.js
+
+require.register("chai.js", function(module, exports, require){
+/*!
+ * chai
+ * Copyright(c) 2011-2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+var used = []
+ , exports = module.exports = {};
+
+/*!
+ * Chai version
+ */
+
+exports.version = '1.0.4';
+
+/*!
+ * Primary `Assertion` prototype
+ */
+
+exports.Assertion = require('./assertion');
+
+/*!
+ * Assertion Error
+ */
+
+exports.AssertionError = require('./browser/error');
+
+/*!
+ * Utils for plugins (not exported)
+ */
+
+var util = require('./utils');
+
+/**
+ * # .use(function)
+ *
+ * Provides a way to extend the internals of Chai
+ *
+ * @param {Function}
+ * @returns {this} for chaining
+ * @api public
+ */
+
+exports.use = function (fn) {
+ if (!~used.indexOf(fn)) {
+ fn(this, util);
+ used.push(fn);
+ }
+
+ return this;
+};
+
+/*!
+ * Expect interface
+ */
+
+var expect = require('./interface/expect');
+exports.use(expect);
+
+/*!
+ * Should interface
+ */
+
+var should = require('./interface/should');
+exports.use(should);
+
+/*!
+ * Assert interface
+ */
+
+var assert = require('./interface/assert');
+exports.use(assert);
+
+}); // module: chai.js
+
+require.register("interface/assert.js", function(module, exports, require){
+/*!
+ * chai
+ * Copyright(c) 2011-2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+
+module.exports = function (chai, util) {
+
+ /*!
+ * Chai dependencies.
+ */
+
+ var Assertion = chai.Assertion
+ , flag = util.flag;
+
+ /*!
+ * Module export.
+ */
+
+ /**
+ * ### assert(expression, message)
+ *
+ * Write your own test expressions.
+ *
+ * assert('foo' !== 'bar', 'foo is not bar');
+ * assert(Array.isArray([]), 'empty arrays are arrays');
+ *
+ * @param {Mixed} expression to test for truthiness
+ * @param {String} message to display on error
+ * @name assert
+ * @api public
+ */
+
+ var assert = chai.assert = function (express, errmsg) {
+ var test = new Assertion(null);
+ test.assert(
+ express
+ , errmsg
+ , '[ negation message unavailable ]'
+ );
+ };
+
+ /**
+ * ### .fail(actual, expected, [message], [operator])
+ *
+ * Throw a failure. Node.js `assert` module-compatible.
+ *
+ * @name fail
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @param {String} operator
+ * @api public
+ */
+
+ assert.fail = function (actual, expected, message, operator) {
+ throw new chai.AssertionError({
+ actual: actual
+ , expected: expected
+ , message: message
+ , operator: operator
+ , stackStartFunction: assert.fail
+ });
+ };
+
+ /**
+ * ### .ok(object, [message])
+ *
+ * Asserts that `object` is truthy.
+ *
+ * assert.ok('everything', 'everything is ok');
+ * assert.ok(false, 'this will fail');
+ *
+ * @name ok
+ * @param {Mixed} object to test
+ * @param {String} message
+ * @api public
+ */
+
+ assert.ok = function (val, msg) {
+ new Assertion(val, msg).is.ok;
+ };
+
+ /**
+ * ### .equal(actual, expected, [message])
+ *
+ * Asserts non-strict equality (`==`) of `actual` and `expected`.
+ *
+ * assert.equal(3, '3', '== coerces values to strings');
+ *
+ * @name equal
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @api public
+ */
+
+ assert.equal = function (act, exp, msg) {
+ var test = new Assertion(act, msg);
+
+ test.assert(
+ exp == flag(test, 'object')
+ , 'expected #{this} to equal #{exp}'
+ , 'expected #{this} to not equal #{act}'
+ , exp
+ , act
+ );
+ };
+
+ /**
+ * ### .notEqual(actual, expected, [message])
+ *
+ * Asserts non-strict inequality (`!=`) of `actual` and `expected`.
+ *
+ * assert.notEqual(3, 4, 'these numbers are not equal');
+ *
+ * @name notEqual
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @api public
+ */
+
+ assert.notEqual = function (act, exp, msg) {
+ var test = new Assertion(act, msg);
+
+ test.assert(
+ exp != flag(test, 'object')
+ , 'expected #{this} to not equal #{exp}'
+ , 'expected #{this} to equal #{act}'
+ , exp
+ , act
+ );
+ };
+
+ /**
+ * ### .strictEqual(actual, expected, [message])
+ *
+ * Asserts strict equality (`===`) of `actual` and `expected`.
+ *
+ * assert.strictEqual(true, true, 'these booleans are strictly equal');
+ *
+ * @name strictEqual
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @api public
+ */
+
+ assert.strictEqual = function (act, exp, msg) {
+ new Assertion(act, msg).to.equal(exp);
+ };
+
+ /**
+ * ### .notStrictEqual(actual, expected, [message])
+ *
+ * Asserts strict inequality (`!==`) of `actual` and `expected`.
+ *
+ * assert.notStrictEqual(3, '3', 'no coercion for strict equality');
+ *
+ * @name notStrictEqual
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @api public
+ */
+
+ assert.notStrictEqual = function (act, exp, msg) {
+ new Assertion(act, msg).to.not.equal(exp);
+ };
+
+ /**
+ * ### .deepEqual(actual, expected, [message])
+ *
+ * Asserts that `actual` is deeply equal to `expected`.
+ *
+ * assert.deepEqual({ tea: 'green' }, { tea: 'green' });
+ *
+ * @name deepEqual
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @api public
+ */
+
+ assert.deepEqual = function (act, exp, msg) {
+ new Assertion(act, msg).to.eql(exp);
+ };
+
+ /**
+ * ### .notDeepEqual(actual, expected, [message])
+ *
+ * Assert that `actual` is not deeply equal to `expected`.
+ *
+ * assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });
+ *
+ * @name notDeepEqual
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @api public
+ */
+
+ assert.notDeepEqual = function (act, exp, msg) {
+ new Assertion(act, msg).to.not.eql(exp);
+ };
+
+ /**
+ * ### .isTrue(value, [message])
+ *
+ * Asserts that `value` is true.
+ *
+ * var teaServed = true;
+ * assert.isTrue(teaServed, 'the tea has been served');
+ *
+ * @name isTrue
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isTrue = function (val, msg) {
+ new Assertion(val, msg).is['true'];
+ };
+
+ /**
+ * ### .isFalse(value, [message])
+ *
+ * Asserts that `value` is false.
+ *
+ * var teaServed = false;
+ * assert.isFalse(teaServed, 'no tea yet? hmm...');
+ *
+ * @name isFalse
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isFalse = function (val, msg) {
+ new Assertion(val, msg).is['false'];
+ };
+
+ /**
+ * ### .isNull(value, [message])
+ *
+ * Asserts that `value` is null.
+ *
+ * assert.isNull(err, 'there was no error');
+ *
+ * @name isNull
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isNull = function (val, msg) {
+ new Assertion(val, msg).to.equal(null);
+ };
+
+ /**
+ * ### .isNotNull(value, [message])
+ *
+ * Asserts that `value` is not null.
+ *
+ * var tea = 'tasty chai';
+ * assert.isNotNull(tea, 'great, time for tea!');
+ *
+ * @name isNotNull
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isNotNull = function (val, msg) {
+ new Assertion(val, msg).to.not.equal(null);
+ };
+
+ /**
+ * ### .isUndefined(value, [message])
+ *
+ * Asserts that `value` is `undefined`.
+ *
+ * var tea;
+ * assert.isUndefined(tea, 'no tea defined');
+ *
+ * @name isUndefined
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isUndefined = function (val, msg) {
+ new Assertion(val, msg).to.equal(undefined);
+ };
+
+ /**
+ * ### .isDefined(value, [message])
+ *
+ * Asserts that `value` is not `undefined`.
+ *
+ * var tea = 'cup of chai';
+ * assert.isDefined(tea, 'tea has been defined');
+ *
+ * @name isUndefined
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isDefined = function (val, msg) {
+ new Assertion(val, msg).to.not.equal(undefined);
+ };
+
+ /**
+ * ### .isFunction(value, [message])
+ *
+ * Asserts that `value` is a function.
+ *
+ * function serveTea() { return 'cup of tea'; };
+ * assert.isFunction(serveTea, 'great, we can have tea now');
+ *
+ * @name isFunction
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isFunction = function (val, msg) {
+ new Assertion(val, msg).to.be.a('function');
+ };
+
+ /**
+ * ### .isNotFunction(value, [message])
+ *
+ * Asserts that `value` is _not_ a function.
+ *
+ * var serveTea = [ 'heat', 'pour', 'sip' ];
+ * assert.isNotFunction(serveTea, 'great, we have listed the steps');
+ *
+ * @name isNotFunction
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isNotFunction = function (val, msg) {
+ new Assertion(val, msg).to.not.be.a('function');
+ };
+
+ /**
+ * ### .isObject(value, [message])
+ *
+ * Asserts that `value` is an object (as revealed by
+ * `Object.prototype.toString`).
+ *
+ * var selection = { name: 'Chai', serve: 'with spices' };
+ * assert.isObject(selection, 'tea selection is an object');
+ *
+ * @name isObject
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isObject = function (val, msg) {
+ new Assertion(val, msg).to.be.a('object');
+ };
+
+ /**
+ * ### .isNotObject(value, [message])
+ *
+ * Asserts that `value` is _not_ an object.
+ *
+ * var selection = 'chai'
+ * assert.isObject(selection, 'tea selection is not an object');
+ * assert.isObject(null, 'null is not an object');
+ *
+ * @name isNotObject
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isNotObject = function (val, msg) {
+ new Assertion(val, msg).to.not.be.a('object');
+ };
+
+ /**
+ * ### .isArray(value, [message])
+ *
+ * Asserts that `value` is an array.
+ *
+ * var menu = [ 'green', 'chai', 'oolong' ];
+ * assert.isArray(menu, 'what kind of tea do we want?');
+ *
+ * @name isArray
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isArray = function (val, msg) {
+ new Assertion(val, msg).to.be.an('array');
+ };
+
+ /**
+ * ### .isNotArray(value, [message])
+ *
+ * Asserts that `value` is _not_ an array.
+ *
+ * var menu = 'green|chai|oolong';
+ * assert.isNotArray(menu, 'what kind of tea do we want?');
+ *
+ * @name isNotArray
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isNotArray = function (val, msg) {
+ new Assertion(val, msg).to.not.be.an('array');
+ };
+
+ /**
+ * ### .isString(value, [message])
+ *
+ * Asserts that `value` is a string.
+ *
+ * var teaOrder = 'chai';
+ * assert.isString(teaOrder, 'order placed');
+ *
+ * @name isString
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isString = function (val, msg) {
+ new Assertion(val, msg).to.be.a('string');
+ };
+
+ /**
+ * ### .isNotString(value, [message])
+ *
+ * Asserts that `value` is _not_ a string.
+ *
+ * var teaOrder = 4;
+ * assert.isNotString(teaOrder, 'order placed');
+ *
+ * @name isNotString
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isNotString = function (val, msg) {
+ new Assertion(val, msg).to.not.be.a('string');
+ };
+
+ /**
+ * ### .isNumber(value, [message])
+ *
+ * Asserts that `value` is a number.
+ *
+ * var cups = 2;
+ * assert.isNumber(cups, 'how many cups');
+ *
+ * @name isNumber
+ * @param {Number} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isNumber = function (val, msg) {
+ new Assertion(val, msg).to.be.a('number');
+ };
+
+ /**
+ * ### .isNotNumber(value, [message])
+ *
+ * Asserts that `value` is _not_ a number.
+ *
+ * var cups = '2 cups please';
+ * assert.isNotNumber(cups, 'how many cups');
+ *
+ * @name isNotNumber
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isNotNumber = function (val, msg) {
+ new Assertion(val, msg).to.not.be.a('number');
+ };
+
+ /**
+ * ### .isBoolean(value, [message])
+ *
+ * Asserts that `value` is a boolean.
+ *
+ * var teaReady = true
+ * , teaServed = false;
+ *
+ * assert.isBoolean(teaReady, 'is the tea ready');
+ * assert.isBoolean(teaServed, 'has tea been served');
+ *
+ * @name isBoolean
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isBoolean = function (val, msg) {
+ new Assertion(val, msg).to.be.a('boolean');
+ };
+
+ /**
+ * ### .isNotBoolean(value, [message])
+ *
+ * Asserts that `value` is _not_ a boolean.
+ *
+ * var teaReady = 'yep'
+ * , teaServed = 'nope';
+ *
+ * assert.isNotBoolean(teaReady, 'is the tea ready');
+ * assert.isNotBoolean(teaServed, 'has tea been served');
+ *
+ * @name isNotBoolean
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.isNotBoolean = function (val, msg) {
+ new Assertion(val, msg).to.not.be.a('boolean');
+ };
+
+ /**
+ * ### .typeOf(value, name, [message])
+ *
+ * Asserts that `value`'s type is `name`, as determined by
+ * `Object.prototype.toString`.
+ *
+ * assert.typeOf({ tea: 'chai' }, 'object', 'we have an object');
+ * assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');
+ * assert.typeOf('tea', 'string', 'we have a string');
+ * assert.typeOf(/tea/, 'regexp', 'we have a regular expression');
+ * assert.typeOf(null, 'null', 'we have a null');
+ * assert.typeOf(undefined, 'undefined', 'we have an undefined');
+ *
+ * @name typeOf
+ * @param {Mixed} value
+ * @param {String} name
+ * @param {String} message
+ * @api public
+ */
+
+ assert.typeOf = function (val, type, msg) {
+ new Assertion(val, msg).to.be.a(type);
+ };
+
+ /**
+ * ### .notTypeOf(value, name, [message])
+ *
+ * Asserts that `value`'s type is _not_ `name`, as determined by
+ * `Object.prototype.toString`.
+ *
+ * assert.notTypeOf('tea', 'number', 'strings are not numbers');
+ *
+ * @name notTypeOf
+ * @param {Mixed} value
+ * @param {String} typeof name
+ * @param {String} message
+ * @api public
+ */
+
+ assert.notTypeOf = function (val, type, msg) {
+ new Assertion(val, msg).to.not.be.a(type);
+ };
+
+ /**
+ * ### .instanceOf(object, constructor, [message])
+ *
+ * Asserts that `value` is an instance of `constructor`.
+ *
+ * var Tea = function (name) { this.name = name; }
+ * , chai = new Tea('chai');
+ *
+ * assert.instanceOf(chai, Tea, 'chai is an instance of tea');
+ *
+ * @name instanceOf
+ * @param {Object} object
+ * @param {Constructor} constructor
+ * @param {String} message
+ * @api public
+ */
+
+ assert.instanceOf = function (val, type, msg) {
+ new Assertion(val, msg).to.be.instanceOf(type);
+ };
+
+ /**
+ * ### .notInstanceOf(object, constructor, [message])
+ *
+ * Asserts `value` is not an instance of `constructor`.
+ *
+ * var Tea = function (name) { this.name = name; }
+ * , chai = new String('chai');
+ *
+ * assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');
+ *
+ * @name notInstanceOf
+ * @param {Object} object
+ * @param {Constructor} constructor
+ * @param {String} message
+ * @api public
+ */
+
+ assert.notInstanceOf = function (val, type, msg) {
+ new Assertion(val, msg).to.not.be.instanceOf(type);
+ };
+
+ /**
+ * ### .include(haystack, needle, [message])
+ *
+ * Asserts that `haystack` includes `needle`. Works
+ * for strings and arrays.
+ *
+ * assert.include('foobar', 'bar', 'foobar contains string "bar"');
+ * assert.include([ 1, 2, 3 ], 3, 'array contains value');
+ *
+ * @name include
+ * @param {Array|String} haystack
+ * @param {Mixed} needle
+ * @param {String} message
+ * @api public
+ */
+
+ assert.include = function (exp, inc, msg) {
+ var obj = new Assertion(exp, msg);
+
+ if (Array.isArray(exp)) {
+ obj.to.include(inc);
+ } else if ('string' === typeof exp) {
+ obj.to.contain.string(inc);
+ }
+ };
+
+ /**
+ * ### .match(value, regexp, [message])
+ *
+ * Asserts that `value` matches the regular expression `regexp`.
+ *
+ * assert.match('foobar', /^foo/, 'regexp matches');
+ *
+ * @name match
+ * @param {Mixed} value
+ * @param {RegExp} regexp
+ * @param {String} message
+ * @api public
+ */
+
+ assert.match = function (exp, re, msg) {
+ new Assertion(exp, msg).to.match(re);
+ };
+
+ /**
+ * ### .notMatch(value, regexp, [message])
+ *
+ * Asserts that `value` does not match the regular expression `regexp`.
+ *
+ * assert.notMatch('foobar', /^foo/, 'regexp does not match');
+ *
+ * @name notMatch
+ * @param {Mixed} value
+ * @param {RegExp} regexp
+ * @param {String} message
+ * @api public
+ */
+
+ assert.notMatch = function (exp, re, msg) {
+ new Assertion(exp, msg).to.not.match(re);
+ };
+
+ /**
+ * ### .property(object, property, [message])
+ *
+ * Asserts that `object` has a property named by `property`.
+ *
+ * assert.property({ tea: { green: 'matcha' }}, 'tea');
+ *
+ * @name property
+ * @param {Object} object
+ * @param {String} property
+ * @param {String} message
+ * @api public
+ */
+
+ assert.property = function (obj, prop, msg) {
+ new Assertion(obj, msg).to.have.property(prop);
+ };
+
+ /**
+ * ### .notProperty(object, property, [message])
+ *
+ * Asserts that `object` does _not_ have a property named by `property`.
+ *
+ * assert.notProperty({ tea: { green: 'matcha' }}, 'coffee');
+ *
+ * @name notProperty
+ * @param {Object} object
+ * @param {String} property
+ * @param {String} message
+ * @api public
+ */
+
+ assert.notProperty = function (obj, prop, msg) {
+ new Assertion(obj, msg).to.not.have.property(prop);
+ };
+
+ /**
+ * ### .deepProperty(object, property, [message])
+ *
+ * Asserts that `object` has a property named by `property`, which can be a
+ * string using dot- and bracket-notation for deep reference.
+ *
+ * assert.deepProperty({ tea: { green: 'matcha' }}, 'tea.green');
+ *
+ * @name deepProperty
+ * @param {Object} object
+ * @param {String} property
+ * @param {String} message
+ * @api public
+ */
+
+ assert.deepProperty = function (obj, prop, msg) {
+ new Assertion(obj, msg).to.have.deep.property(prop);
+ };
+
+ /**
+ * ### .notDeepProperty(object, property, [message])
+ *
+ * Asserts that `object` does _not_ have a property named by `property`, which
+ * can be a string using dot- and bracket-notation for deep reference.
+ *
+ * assert.notDeepProperty({ tea: { green: 'matcha' }}, 'tea.oolong');
+ *
+ * @name notDeepProperty
+ * @param {Object} object
+ * @param {String} property
+ * @param {String} message
+ * @api public
+ */
+
+ assert.notDeepProperty = function (obj, prop, msg) {
+ new Assertion(obj, msg).to.not.have.deep.property(prop);
+ };
+
+ /**
+ * ### .propertyVal(object, property, value, [message])
+ *
+ * Asserts that `object` has a property named by `property` with value given
+ * by `value`.
+ *
+ * assert.propertyVal({ tea: 'is good' }, 'tea', 'is good');
+ *
+ * @name propertyVal
+ * @param {Object} object
+ * @param {String} property
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.propertyVal = function (obj, prop, val, msg) {
+ new Assertion(obj, msg).to.have.property(prop, val);
+ };
+
+ /**
+ * ### .propertyNotVal(object, property, value, [message])
+ *
+ * Asserts that `object` has a property named by `property`, but with a value
+ * different from that given by `value`.
+ *
+ * assert.propertyNotVal({ tea: 'is good' }, 'tea', 'is bad');
+ *
+ * @name propertyNotVal
+ * @param {Object} object
+ * @param {String} property
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.propertyNotVal = function (obj, prop, val, msg) {
+ new Assertion(obj, msg).to.not.have.property(prop, val);
+ };
+
+ /**
+ * ### .deepPropertyVal(object, property, value, [message])
+ *
+ * Asserts that `object` has a property named by `property` with value given
+ * by `value`. `property` can use dot- and bracket-notation for deep
+ * reference.
+ *
+ * assert.deepPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');
+ *
+ * @name deepPropertyVal
+ * @param {Object} object
+ * @param {String} property
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.deepPropertyVal = function (obj, prop, val, msg) {
+ new Assertion(obj, msg).to.have.deep.property(prop, val);
+ };
+
+ /**
+ * ### .deepPropertyNotVal(object, property, value, [message])
+ *
+ * Asserts that `object` has a property named by `property`, but with a value
+ * different from that given by `value`. `property` can use dot- and
+ * bracket-notation for deep reference.
+ *
+ * assert.deepPropertyNotVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');
+ *
+ * @name deepPropertyNotVal
+ * @param {Object} object
+ * @param {String} property
+ * @param {Mixed} value
+ * @param {String} message
+ * @api public
+ */
+
+ assert.deepPropertyNotVal = function (obj, prop, val, msg) {
+ new Assertion(obj, msg).to.not.have.deep.property(prop, val);
+ };
+
+ /**
+ * ### .lengthOf(object, length, [message])
+ *
+ * Asserts that `object` has a `length` property with the expected value.
+ *
+ * assert.lengthOf([1,2,3], 3, 'array has length of 3');
+ * assert.lengthOf('foobar', 5, 'string has length of 6');
+ *
+ * @name lengthOf
+ * @param {Mixed} object
+ * @param {Number} length
+ * @param {String} message
+ * @api public
+ */
+
+ assert.lengthOf = function (exp, len, msg) {
+ new Assertion(exp, msg).to.have.length(len);
+ };
+
+ /**
+ * ### .throws(function, [constructor/regexp], [message])
+ *
+ * Asserts that `function` will throw an error that is an instance of
+ * `constructor`, or alternately that it will throw an error with message
+ * matching `regexp`.
+ *
+ * assert.throw(fn, ReferenceError, 'function throws a reference error');
+ *
+ * @name throws
+ * @alias throw
+ * @alias Throw
+ * @param {Function} function
+ * @param {ErrorConstructor} constructor
+ * @param {RegExp} regexp
+ * @param {String} message
+ * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
+ * @api public
+ */
+
+ assert.Throw = function (fn, type, msg) {
+ if ('string' === typeof type) {
+ msg = type;
+ type = null;
+ }
+
+ new Assertion(fn, msg).to.Throw(type);
+ };
+
+ /**
+ * ### .doesNotThrow(function, [constructor/regexp], [message])
+ *
+ * Asserts that `function` will _not_ throw an error that is an instance of
+ * `constructor`, or alternately that it will not throw an error with message
+ * matching `regexp`.
+ *
+ * assert.doesNotThrow(fn, Error, 'function does not throw');
+ *
+ * @name doesNotThrow
+ * @param {Function} function
+ * @param {ErrorConstructor} constructor
+ * @param {RegExp} regexp
+ * @param {String} message
+ * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
+ * @api public
+ */
+
+ assert.doesNotThrow = function (fn, type, msg) {
+ if ('string' === typeof type) {
+ msg = type;
+ type = null;
+ }
+
+ new Assertion(fn, msg).to.not.Throw(type);
+ };
+
+ /**
+ * ### .operator(val1, operator, val2, [message])
+ *
+ * Compares two values using `operator`.
+ *
+ * assert.operator(1, '<', 2, 'everything is ok');
+ * assert.operator(1, '>', 2, 'this will fail');
+ *
+ * @name operator
+ * @param {Mixed} val1
+ * @param {String} operator
+ * @param {Mixed} val2
+ * @param {String} message
+ * @api public
+ */
+
+ assert.operator = function (val, operator, val2, msg) {
+ if (!~['==', '===', '>', '>=', '<', '<=', '!=', '!=='].indexOf(operator)) {
+ throw new Error('Invalid operator "' + operator + '"');
+ }
+ var test = new Assertion(eval(val + operator + val2), msg);
+ test.assert(
+ true === flag(test, 'object')
+ , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2)
+ , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) );
+ };
+
+ /*!
+ * Undocumented / untested
+ */
+
+ assert.ifError = function (val, msg) {
+ new Assertion(val, msg).to.not.be.ok;
+ };
+
+ /*!
+ * Aliases.
+ */
+
+ (function alias(name, as){
+ assert[as] = assert[name];
+ return alias;
+ })
+ ('Throw', 'throw')
+ ('Throw', 'throws');
+};
+
+}); // module: interface/assert.js
+
+require.register("interface/expect.js", function(module, exports, require){
+/*!
+ * chai
+ * Copyright(c) 2011-2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+module.exports = function (chai, util) {
+ chai.expect = function (val, message) {
+ return new chai.Assertion(val, message);
+ };
+};
+
+
+}); // module: interface/expect.js
+
+require.register("interface/should.js", function(module, exports, require){
+/*!
+ * chai
+ * Copyright(c) 2011-2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+module.exports = function (chai, util) {
+ var Assertion = chai.Assertion;
+
+ function loadShould () {
+ // modify Object.prototype to have `should`
+ Object.defineProperty(Object.prototype, 'should',
+ { set: function () {}
+ , get: function(){
+ if (this instanceof String || this instanceof Number) {
+ return new Assertion(this.constructor(this));
+ } else if (this instanceof Boolean) {
+ return new Assertion(this == true);
+ }
+ return new Assertion(this);
+ }
+ , configurable: true
+ });
+
+ var should = {};
+
+ should.equal = function (val1, val2) {
+ new Assertion(val1).to.equal(val2);
+ };
+
+ should.Throw = function (fn, errt, errs) {
+ new Assertion(fn).to.Throw(errt, errs);
+ };
+
+ should.exist = function (val) {
+ new Assertion(val).to.exist;
+ }
+
+ // negation
+ should.not = {}
+
+ should.not.equal = function (val1, val2) {
+ new Assertion(val1).to.not.equal(val2);
+ };
+
+ should.not.Throw = function (fn, errt, errs) {
+ new Assertion(fn).to.not.Throw(errt, errs);
+ };
+
+ should.not.exist = function (val) {
+ new Assertion(val).to.not.exist;
+ }
+
+ should['throw'] = should['Throw'];
+ should.not['throw'] = should.not['Throw'];
+
+ return should;
+ };
+
+ chai.should = loadShould;
+ chai.Should = loadShould;
+};
+
+}); // module: interface/should.js
+
+require.register("utils/addChainableMethod.js", function(module, exports, require){
+/*!
+ * Chai - addChainingMethod utility
+ * Copyright(c) 2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+/*!
+ * Module dependencies
+ */
+
+var transferFlags = require('./transferFlags');
+
+/**
+ * ### addChainableMethod (ctx, name, method, chainingBehavior)
+ *
+ * Adds a method to an object, such that the method can also be chained.
+ *
+ * utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {
+ * var obj = utils.flag(this, 'object');
+ * new chai.Assertion(obj).to.be.equal(str);
+ * });
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ * chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);
+ *
+ * The result can then be used as both a method assertion, executing both `method` and
+ * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.
+ *
+ * expect(fooStr).to.be.foo('bar');
+ * expect(fooStr).to.be.foo.equal('foo');
+ *
+ * @param {Object} ctx object to which the method is added
+ * @param {String} name of method to add
+ * @param {Function} method function to be used for `name`, when called
+ * @param {Function} chainingBehavior function to be called every time the property is accessed
+ * @name addChainableMethod
+ * @api public
+ */
+
+module.exports = function (ctx, name, method, chainingBehavior) {
+ if (typeof chainingBehavior !== 'function')
+ chainingBehavior = function () { };
+
+ Object.defineProperty(ctx, name,
+ { get: function () {
+ chainingBehavior.call(this);
+
+ var assert = function () {
+ var result = method.apply(this, arguments);
+ return result === undefined ? this : result;
+ };
+
+ // Re-enumerate every time to better accomodate plugins.
+ var asserterNames = Object.getOwnPropertyNames(ctx);
+ asserterNames.forEach(function (asserterName) {
+ var pd = Object.getOwnPropertyDescriptor(ctx, asserterName)
+ , functionProtoPD = Object.getOwnPropertyDescriptor(Function.prototype, asserterName);
+ // Avoid trying to overwrite things that we can't, like `length` and `arguments`.
+ if (functionProtoPD && !functionProtoPD.configurable) return;
+ if (asserterName === 'arguments') return; // @see chaijs/chai/issues/69
+ Object.defineProperty(assert, asserterName, pd);
+ });
+
+ transferFlags(this, assert);
+ return assert;
+ }
+ , configurable: true
+ });
+};
+
+}); // module: utils/addChainableMethod.js
+
+require.register("utils/addMethod.js", function(module, exports, require){
+/*!
+ * Chai - addMethod utility
+ * Copyright(c) 2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+/**
+ * ### addMethod (ctx, name, method)
+ *
+ * Adds a method to the prototype of an object.
+ *
+ * utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {
+ * var obj = utils.flag(this, 'object');
+ * new chai.Assertion(obj).to.be.equal(str);
+ * });
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ * chai.Assertion.addMethod('foo', fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ * expect(fooStr).to.be.foo('bar');
+ *
+ * @param {Object} ctx object to which the method is added
+ * @param {String} name of method to add
+ * @param {Function} method function to be used for name
+ * @name addMethod
+ * @api public
+ */
+
+module.exports = function (ctx, name, method) {
+ ctx[name] = function () {
+ var result = method.apply(this, arguments);
+ return result === undefined ? this : result;
+ };
+};
+
+}); // module: utils/addMethod.js
+
+require.register("utils/addProperty.js", function(module, exports, require){
+/*!
+ * Chai - addProperty utility
+ * Copyright(c) 2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+/**
+ * ### addProperty (ctx, name, getter)
+ *
+ * Adds a property to the prototype of an object.
+ *
+ * utils.addProperty(chai.Assertion.prototype, 'foo', function () {
+ * var obj = utils.flag(this, 'object');
+ * new chai.Assertion(obj).to.be.instanceof(Foo);
+ * });
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ * chai.Assertion.addProperty('foo', fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ * expect(myFoo).to.be.foo;
+ *
+ * @param {Object} ctx object to which the property is added
+ * @param {String} name of property to add
+ * @param {Function} getter function to be used for name
+ * @name addProperty
+ * @api public
+ */
+
+module.exports = function (ctx, name, getter) {
+ Object.defineProperty(ctx, name,
+ { get: function () {
+ var result = getter.call(this);
+ return result === undefined ? this : result;
+ }
+ , configurable: true
+ });
+};
+
+}); // module: utils/addProperty.js
+
+require.register("utils/eql.js", function(module, exports, require){
+// This is directly from Node.js assert
+// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/assert.js
+
+
+module.exports = _deepEqual;
+
+// For browser implementation
+if (!Buffer) {
+ var Buffer = {
+ isBuffer: function () {
+ return false;
+ }
+ };
+}
+
+function _deepEqual(actual, expected) {
+ // 7.1. All identical values are equivalent, as determined by ===.
+ if (actual === expected) {
+ return true;
+
+ } else if (Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) {
+ if (actual.length != expected.length) return false;
+
+ for (var i = 0; i < actual.length; i++) {
+ if (actual[i] !== expected[i]) return false;
+ }
+
+ return true;
+
+ // 7.2. If the expected value is a Date object, the actual value is
+ // equivalent if it is also a Date object that refers to the same time.
+ } else if (actual instanceof Date && expected instanceof Date) {
+ return actual.getTime() === expected.getTime();
+
+ // 7.3. Other pairs that do not both pass typeof value == 'object',
+ // equivalence is determined by ==.
+ } else if (typeof actual != 'object' && typeof expected != 'object') {
+ return actual === expected;
+
+ // 7.4. For all other Object pairs, including Array objects, equivalence is
+ // determined by having the same number of owned properties (as verified
+ // with Object.prototype.hasOwnProperty.call), the same set of keys
+ // (although not necessarily the same order), equivalent values for every
+ // corresponding key, and an identical 'prototype' property. Note: this
+ // accounts for both named and indexed properties on Arrays.
+ } else {
+ return objEquiv(actual, expected);
+ }
+}
+
+function isUndefinedOrNull(value) {
+ return value === null || value === undefined;
+}
+
+function isArguments(object) {
+ return Object.prototype.toString.call(object) == '[object Arguments]';
+}
+
+function objEquiv(a, b) {
+ if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
+ return false;
+ // an identical 'prototype' property.
+ if (a.prototype !== b.prototype) return false;
+ //~~~I've managed to break Object.keys through screwy arguments passing.
+ // Converting to array solves the problem.
+ if (isArguments(a)) {
+ if (!isArguments(b)) {
+ return false;
+ }
+ a = pSlice.call(a);
+ b = pSlice.call(b);
+ return _deepEqual(a, b);
+ }
+ try {
+ var ka = Object.keys(a),
+ kb = Object.keys(b),
+ key, i;
+ } catch (e) {//happens when one is a string literal and the other isn't
+ return false;
+ }
+ // having the same number of owned properties (keys incorporates
+ // hasOwnProperty)
+ if (ka.length != kb.length)
+ return false;
+ //the same set of keys (although not necessarily the same order),
+ ka.sort();
+ kb.sort();
+ //~~~cheap key test
+ for (i = ka.length - 1; i >= 0; i--) {
+ if (ka[i] != kb[i])
+ return false;
+ }
+ //equivalent values for every corresponding key, and
+ //~~~possibly expensive deep test
+ for (i = ka.length - 1; i >= 0; i--) {
+ key = ka[i];
+ if (!_deepEqual(a[key], b[key])) return false;
+ }
+ return true;
+}
+}); // module: utils/eql.js
+
+require.register("utils/flag.js", function(module, exports, require){
+/*!
+ * Chai - flag utility
+ * Copyright(c) 2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+/**
+ * ### flag(object ,key, [value])
+ *
+ * Get or set a flag value on an object. If a
+ * value is provided it will be set, else it will
+ * return the currently set value or `undefined` if
+ * the value is not set.
+ *
+ * utils.flag(this, 'foo', 'bar'); // setter
+ * utils.flag(this, 'foo'); // getter, returns `bar`
+ *
+ * @param {Object} object (constructed Assertion
+ * @param {String} key
+ * @param {Mixed} value (optional)
+ * @name flag
+ * @api private
+ */
+
+module.exports = function (obj, key, value) {
+ var flags = obj.__flags || (obj.__flags = Object.create(null));
+ if (arguments.length === 3) {
+ flags[key] = value;
+ } else {
+ return flags[key];
+ }
+};
+
+}); // module: utils/flag.js
+
+require.register("utils/getActual.js", function(module, exports, require){
+/*!
+ * Chai - getActual utility
+ * Copyright(c) 2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+/**
+ * # getActual(object, [actual])
+ *
+ * Returns the `actual` value for an Assertion
+ *
+ * @param {Object} object (constructed Assertion)
+ * @param {Arguments} chai.Assertion.prototype.assert arguments
+ */
+
+module.exports = function (obj, args) {
+ var actual = args[4];
+ return 'undefined' !== actual ? actual : obj.obj;
+};
+
+}); // module: utils/getActual.js
+
+require.register("utils/getMessage.js", function(module, exports, require){
+/*!
+ * Chai - message composition utility
+ * Copyright(c) 2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+/*!
+ * Module dependancies
+ */
+
+var flag = require('./flag')
+ , getActual = require('./getActual')
+ , inspect = require('./inspect');
+
+/**
+ * # getMessage(object, message, negateMessage)
+ *
+ * Construct the error message based on flags
+ * and template tags. Template tags will return
+ * a stringified inspection of the object referenced.
+ *
+ * Messsage template tags:
+ * - `#{this}` current asserted object
+ * - `#{act}` actual value
+ * - `#{exp}` expected value
+ *
+ * @param {Object} object (constructed Assertion)
+ * @param {Arguments} chai.Assertion.prototype.assert arguments
+ */
+
+module.exports = function (obj, args) {
+ var negate = flag(obj, 'negate')
+ , val = flag(obj, 'object')
+ , expected = args[3]
+ , actual = getActual(obj, args)
+ , msg = negate ? args[2] : args[1]
+ , flagMsg = flag(obj, 'message');
+
+ msg = msg || '';
+ msg = msg
+ .replace(/#{this}/g, inspect(val))
+ .replace(/#{act}/g, inspect(actual))
+ .replace(/#{exp}/g, inspect(expected));
+
+ return flagMsg ? flagMsg + ': ' + msg : msg;
+};
+
+}); // module: utils/getMessage.js
+
+require.register("utils/getName.js", function(module, exports, require){
+/*!
+ * Chai - getName utility
+ * Copyright(c) 2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+/**
+ * # getName(func)
+ *
+ * Gets the name of a function, in a cross-browser way.
+ *
+ * @param {Function} a function (usually a constructor)
+ */
+
+module.exports = function (func) {
+ if (func.name) return func.name;
+
+ var match = /^\s?function ([^(]*)\(/.exec(func);
+ return match && match[1] ? match[1] : "";
+};
+
+}); // module: utils/getName.js
+
+require.register("utils/getPathValue.js", function(module, exports, require){
+/*!
+ * Chai - getPathValue utility
+ * Copyright(c) 2012 Jake Luer <[email protected]>
+ * @see https://github.com/logicalparadox/filtr
+ * MIT Licensed
+ */
+
+/**
+ * ### .getPathValue(path, object)
+ *
+ * This allows the retrieval of values in an
+ * object given a string path.
+ *
+ * var obj = {
+ * prop1: {
+ * arr: ['a', 'b', 'c']
+ * , str: 'Hello'
+ * }
+ * , prop2: {
+ * arr: [ { nested: 'Universe' } ]
+ * , str: 'Hello again!'
+ * }
+ * }
+ *
+ * The following would be the results.
+ *
+ * getPathValue('prop1.str', obj); // Hello
+ * getPathValue('prop1.att[2]', obj); // b
+ * getPathValue('prop2.arr[0].nested', obj); // Universe
+ *
+ * @param {String} path
+ * @param {Object} object
+ * @returns {Object} value or `undefined`
+ * @name getPathValue
+ * @api public
+ */
+
+var getPathValue = module.exports = function (path, obj) {
+ var parsed = parsePath(path);
+ return _getPathValue(parsed, obj);
+};
+
+/*!
+ * ## parsePath(path)
+ *
+ * Helper function used to parse string object
+ * paths. Use in conjunction with `_getPathValue`.
+ *
+ * var parsed = parsePath('myobject.property.subprop');
+ *
+ * ### Paths:
+ *
+ * * Can be as near infinitely deep and nested
+ * * Arrays are also valid using the formal `myobject.document[3].property`.
+ *
+ * @param {String} path
+ * @returns {Object} parsed
+ * @api private
+ */
+
+function parsePath (path) {
+ var parts = path.split('.').filter(Boolean);
+ return parts.map(function (value) {
+ var re = /([A-Za-z0-9]+)\[(\d+)\]$/
+ , mArr = re.exec(value)
+ , val;
+ if (mArr) val = { p: mArr[1], i: parseFloat(mArr[2]) };
+ return val || value;
+ });
+};
+
+/*!
+ * ## _getPathValue(parsed, obj)
+ *
+ * Helper companion function for `.parsePath` that returns
+ * the value located at the parsed address.
+ *
+ * var value = getPathValue(parsed, obj);
+ *
+ * @param {Object} parsed definition from `parsePath`.
+ * @param {Object} object to search against
+ * @returns {Object|Undefined} value
+ * @api private
+ */
+
+function _getPathValue (parsed, obj) {
+ var tmp = obj
+ , res;
+ for (var i = 0, l = parsed.length; i < l; i++) {
+ var part = parsed[i];
+ if (tmp) {
+ if ('object' === typeof part && tmp[part.p]) {
+ tmp = tmp[part.p][part.i];
+ } else {
+ tmp = tmp[part];
+ }
+ if (i == (l - 1)) res = tmp;
+ } else {
+ res = undefined;
+ }
+ }
+ return res;
+};
+
+}); // module: utils/getPathValue.js
+
+require.register("utils/index.js", function(module, exports, require){
+/*!
+ * chai
+ * Copyright(c) 2011 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+/*!
+ * Main exports
+ */
+
+var exports = module.exports = {};
+
+/*!
+ * test utility
+ */
+
+exports.test = require('./test');
+
+/*!
+ * message utility
+ */
+
+exports.getMessage = require('./getMessage');
+
+/*!
+ * actual utility
+ */
+
+exports.getActual = require('./getActual');
+
+/*!
+ * Inspect util
+ */
+
+exports.inspect = require('./inspect');
+
+/*!
+ * Flag utility
+ */
+
+exports.flag = require('./flag');
+
+/*!
+ * Flag transferring utility
+ */
+
+exports.transferFlags = require('./transferFlags');
+
+/*!
+ * Deep equal utility
+ */
+
+exports.eql = require('./eql');
+
+/*!
+ * Deep path value
+ */
+
+exports.getPathValue = require('./getPathValue');
+
+/*!
+ * Function name
+ */
+
+exports.getName = require('./getName');
+
+/*!
+ * add Property
+ */
+
+exports.addProperty = require('./addProperty');
+
+/*!
+ * add Method
+ */
+
+exports.addMethod = require('./addMethod');
+
+/*!
+ * overwrite Property
+ */
+
+exports.overwriteProperty = require('./overwriteProperty');
+
+/*!
+ * overwrite Method
+ */
+
+exports.overwriteMethod = require('./overwriteMethod');
+
+/*!
+ * Add a chainable method
+ */
+
+exports.addChainableMethod = require('./addChainableMethod');
+
+
+}); // module: utils/index.js
+
+require.register("utils/inspect.js", function(module, exports, require){
+// This is (almost) directly from Node.js utils
+// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js
+
+var getName = require('./getName');
+
+module.exports = inspect;
+
+/**
+ * Echos the value of a value. Trys to print the value out
+ * in the best way possible given the different types.
+ *
+ * @param {Object} obj The object to print out.
+ * @param {Boolean} showHidden Flag that shows hidden (not enumerable)
+ * properties of objects.
+ * @param {Number} depth Depth in which to descend in object. Default is 2.
+ * @param {Boolean} colors Flag to turn on ANSI escape codes to color the
+ * output. Default is false (no coloring).
+ */
+function inspect(obj, showHidden, depth, colors) {
+ var ctx = {
+ showHidden: showHidden,
+ seen: [],
+ stylize: function (str) { return str; }
+ };
+ return formatValue(ctx, obj, (typeof depth === 'undefined' ? 2 : depth));
+}
+
+function formatValue(ctx, value, recurseTimes) {
+ // Provide a hook for user-specified inspect functions.
+ // Check that value is an object with an inspect function on it
+ if (value && typeof value.inspect === 'function' &&
+ // Filter out the util module, it's inspect function is special
+ value.inspect !== exports.inspect &&
+ // Also filter out any prototype objects using the circular check.
+ !(value.constructor && value.constructor.prototype === value)) {
+ return value.inspect(recurseTimes);
+ }
+
+ // Primitive types cannot have properties
+ var primitive = formatPrimitive(ctx, value);
+ if (primitive) {
+ return primitive;
+ }
+
+ // Look up the keys of the object.
+ var visibleKeys = Object.keys(value);
+ var keys = ctx.showHidden ? Object.getOwnPropertyNames(value) : visibleKeys;
+
+ // Some type of object without properties can be shortcutted.
+ // In IE, errors have a single `stack` property, or if they are vanilla `Error`,
+ // a `stack` plus `description` property; ignore those for consistency.
+ if (keys.length === 0 || (isError(value) && (
+ (keys.length === 1 && keys[0] === 'stack') ||
+ (keys.length === 2 && keys[0] === 'description' && keys[1] === 'stack')
+ ))) {
+ if (typeof value === 'function') {
+ var name = getName(value);
+ var nameSuffix = name ? ': ' + name : '';
+ return ctx.stylize('[Function' + nameSuffix + ']', 'special');
+ }
+ if (isRegExp(value)) {
+ return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+ }
+ if (isDate(value)) {
+ return ctx.stylize(Date.prototype.toUTCString.call(value), 'date');
+ }
+ if (isError(value)) {
+ return formatError(value);
+ }
+ }
+
+ var base = '', array = false, braces = ['{', '}'];
+
+ // Make Array say that they are Array
+ if (isArray(value)) {
+ array = true;
+ braces = ['[', ']'];
+ }
+
+ // Make functions say that they are functions
+ if (typeof value === 'function') {
+ var n = value.name ? ': ' + value.name : '';
+ base = ' [Function' + n + ']';
+ }
+
+ // Make RegExps say that they are RegExps
+ if (isRegExp(value)) {
+ base = ' ' + RegExp.prototype.toString.call(value);
+ }
+
+ // Make dates with properties first say the date
+ if (isDate(value)) {
+ base = ' ' + Date.prototype.toUTCString.call(value);
+ }
+
+ // Make error with message first say the error
+ if (isError(value)) {
+ return formatError(value);
+ }
+
+ if (keys.length === 0 && (!array || value.length == 0)) {
+ return braces[0] + base + braces[1];
+ }
+
+ if (recurseTimes < 0) {
+ if (isRegExp(value)) {
+ return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+ } else {
+ return ctx.stylize('[Object]', 'special');
+ }
+ }
+
+ ctx.seen.push(value);
+
+ var output;
+ if (array) {
+ output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
+ } else {
+ output = keys.map(function(key) {
+ return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
+ });
+ }
+
+ ctx.seen.pop();
+
+ return reduceToSingleString(output, base, braces);
+}
+
+
+function formatPrimitive(ctx, value) {
+ switch (typeof value) {
+ case 'undefined':
+ return ctx.stylize('undefined', 'undefined');
+
+ case 'string':
+ var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
+ .replace(/'/g, "\\'")
+ .replace(/\\"/g, '"') + '\'';
+ return ctx.stylize(simple, 'string');
+
+ case 'number':
+ return ctx.stylize('' + value, 'number');
+
+ case 'boolean':
+ return ctx.stylize('' + value, 'boolean');
+ }
+ // For some reason typeof null is "object", so special case here.
+ if (value === null) {
+ return ctx.stylize('null', 'null');
+ }
+}
+
+
+function formatError(value) {
+ return '[' + Error.prototype.toString.call(value) + ']';
+}
+
+
+function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
+ var output = [];
+ for (var i = 0, l = value.length; i < l; ++i) {
+ if (Object.prototype.hasOwnProperty.call(value, String(i))) {
+ output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+ String(i), true));
+ } else {
+ output.push('');
+ }
+ }
+ keys.forEach(function(key) {
+ if (!key.match(/^\d+$/)) {
+ output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+ key, true));
+ }
+ });
+ return output;
+}
+
+
+function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
+ var name, str;
+ if (value.__lookupGetter__) {
+ if (value.__lookupGetter__(key)) {
+ if (value.__lookupSetter__(key)) {
+ str = ctx.stylize('[Getter/Setter]', 'special');
+ } else {
+ str = ctx.stylize('[Getter]', 'special');
+ }
+ } else {
+ if (value.__lookupSetter__(key)) {
+ str = ctx.stylize('[Setter]', 'special');
+ }
+ }
+ }
+ if (visibleKeys.indexOf(key) < 0) {
+ name = '[' + key + ']';
+ }
+ if (!str) {
+ if (ctx.seen.indexOf(value[key]) < 0) {
+ if (recurseTimes === null) {
+ str = formatValue(ctx, value[key], null);
+ } else {
+ str = formatValue(ctx, value[key], recurseTimes - 1);
+ }
+ if (str.indexOf('\n') > -1) {
+ if (array) {
+ str = str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n').substr(2);
+ } else {
+ str = '\n' + str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n');
+ }
+ }
+ } else {
+ str = ctx.stylize('[Circular]', 'special');
+ }
+ }
+ if (typeof name === 'undefined') {
+ if (array && key.match(/^\d+$/)) {
+ return str;
+ }
+ name = JSON.stringify('' + key);
+ if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
+ name = name.substr(1, name.length - 2);
+ name = ctx.stylize(name, 'name');
+ } else {
+ name = name.replace(/'/g, "\\'")
+ .replace(/\\"/g, '"')
+ .replace(/(^"|"$)/g, "'");
+ name = ctx.stylize(name, 'string');
+ }
+ }
+
+ return name + ': ' + str;
+}
+
+
+function reduceToSingleString(output, base, braces) {
+ var numLinesEst = 0;
+ var length = output.reduce(function(prev, cur) {
+ numLinesEst++;
+ if (cur.indexOf('\n') >= 0) numLinesEst++;
+ return prev + cur.length + 1;
+ }, 0);
+
+ if (length > 60) {
+ return braces[0] +
+ (base === '' ? '' : base + '\n ') +
+ ' ' +
+ output.join(',\n ') +
+ ' ' +
+ braces[1];
+ }
+
+ return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
+}
+
+function isArray(ar) {
+ return Array.isArray(ar) ||
+ (typeof ar === 'object' && objectToString(ar) === '[object Array]');
+}
+
+function isRegExp(re) {
+ return typeof re === 'object' && objectToString(re) === '[object RegExp]';
+}
+
+function isDate(d) {
+ return typeof d === 'object' && objectToString(d) === '[object Date]';
+}
+
+function isError(e) {
+ return typeof e === 'object' && objectToString(e) === '[object Error]';
+}
+
+function objectToString(o) {
+ return Object.prototype.toString.call(o);
+}
+
+}); // module: utils/inspect.js
+
+require.register("utils/overwriteMethod.js", function(module, exports, require){
+/*!
+ * Chai - overwriteMethod utility
+ * Copyright(c) 2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+/**
+ * ### overwriteMethod (ctx, name, fn)
+ *
+ * Overwites an already existing method and provides
+ * access to previous function. Must return function
+ * to be used for name.
+ *
+ * utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {
+ * return function (str) {
+ * var obj = utils.flag(this, 'object');
+ * if (obj instanceof Foo) {
+ * new chai.Assertion(obj.value).to.equal(str);
+ * } else {
+ * _super.apply(this, arguments);
+ * }
+ * }
+ * });
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ * chai.Assertion.overwriteMethod('foo', fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ * expect(myFoo).to.equal('bar');
+ *
+ * @param {Object} ctx object whose method is to be overwritten
+ * @param {String} name of method to overwrite
+ * @param {Function} method function that returns a function to be used for name
+ * @name overwriteMethod
+ * @api public
+ */
+
+module.exports = function (ctx, name, method) {
+ var _method = ctx[name]
+ , _super = function () { return this; };
+
+ if (_method && 'function' === typeof _method)
+ _super = _method;
+
+ ctx[name] = function () {
+ var result = method(_super).apply(this, arguments);
+ return result === undefined ? this : result;
+ }
+};
+
+}); // module: utils/overwriteMethod.js
+
+require.register("utils/overwriteProperty.js", function(module, exports, require){
+/*!
+ * Chai - overwriteProperty utility
+ * Copyright(c) 2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+/**
+ * ### overwriteProperty (ctx, name, fn)
+ *
+ * Overwites an already existing property getter and provides
+ * access to previous value. Must return function to use as getter.
+ *
+ * utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {
+ * return function () {
+ * var obj = utils.flag(this, 'object');
+ * if (obj instanceof Foo) {
+ * new chai.Assertion(obj.name).to.equal('bar');
+ * } else {
+ * _super.call(this);
+ * }
+ * }
+ * });
+ *
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ * chai.Assertion.overwriteProperty('foo', fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ * expect(myFoo).to.be.ok;
+ *
+ * @param {Object} ctx object whose property is to be overwritten
+ * @param {String} name of property to overwrite
+ * @param {Function} getter function that returns a getter function to be used for name
+ * @name overwriteProperty
+ * @api public
+ */
+
+module.exports = function (ctx, name, getter) {
+ var _get = Object.getOwnPropertyDescriptor(ctx, name)
+ , _super = function () {};
+
+ if (_get && 'function' === typeof _get.get)
+ _super = _get.get
+
+ Object.defineProperty(ctx, name,
+ { get: function () {
+ var result = getter(_super).call(this);
+ return result === undefined ? this : result;
+ }
+ , configurable: true
+ });
+};
+
+}); // module: utils/overwriteProperty.js
+
+require.register("utils/test.js", function(module, exports, require){
+/*!
+ * Chai - test utility
+ * Copyright(c) 2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+/*!
+ * Module dependancies
+ */
+
+var flag = require('./flag');
+
+/**
+ * # test(object, expression)
+ *
+ * Test and object for expression.
+ *
+ * @param {Object} object (constructed Assertion)
+ * @param {Arguments} chai.Assertion.prototype.assert arguments
+ */
+
+module.exports = function (obj, args) {
+ var negate = flag(obj, 'negate')
+ , expr = args[0];
+ return negate ? !expr : expr;
+};
+
+}); // module: utils/test.js
+
+require.register("utils/transferFlags.js", function(module, exports, require){
+/*!
+ * Chai - transferFlags utility
+ * Copyright(c) 2012 Jake Luer <[email protected]>
+ * MIT Licensed
+ */
+
+/**
+ * ### transferFlags(assertion, object, includeAll = true)
+ *
+ * Transfer all the flags for `assertion` to `object`. If
+ * `includeAll` is set to `false`, then the base Chai
+ * assertion flags (namely `object`, `ssfi`, and `message`)
+ * will not be transferred.
+ *
+ *
+ * var newAssertion = new Assertion();
+ * utils.transferFlags(assertion, newAssertion);
+ *
+ * var anotherAsseriton = new Assertion(myObj);
+ * utils.transferFlags(assertion, anotherAssertion, false);
+ *
+ * @param {Assertion} assertion the assertion to transfer the flags from
+ * @param {Object} object the object to transfer the flags too; usually a new assertion
+ * @param {Boolean} includeAll
+ * @name getAllFlags
+ * @api private
+ */
+
+module.exports = function (assertion, object, includeAll) {
+ var flags = assertion.__flags || (assertion.__flags = Object.create(null));
+
+ if (!object.__flags) {
+ object.__flags = Object.create(null);
+ }
+
+ includeAll = arguments.length === 3 ? includeAll : true;
+
+ for (var flag in flags) {
+ if (includeAll ||
+ (flag !== 'object' && flag !== 'ssfi' && flag != 'message')) {
+ object.__flags[flag] = flags[flag];
+ }
+ }
+};
+
+}); // module: utils/transferFlags.js
+
+
+ return require('chai');
+}); \ No newline at end of file
diff --git a/test/support/sinon-1.5.2.js b/test/support/sinon-1.5.2.js
new file mode 100644
index 00000000..c0728bbd
--- /dev/null
+++ b/test/support/sinon-1.5.2.js
@@ -0,0 +1,4153 @@
+/**
+ * Sinon.JS 1.5.2, 2012/11/27
+ *
+ * @author Christian Johansen ([email protected])
+ * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS
+ *
+ * (The BSD License)
+ *
+ * Copyright (c) 2010-2012, Christian Johansen, [email protected]
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of Christian Johansen nor the names of his contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+var sinon = (function () {
+"use strict";
+
+var buster = (function (setTimeout, B) {
+ var isNode = typeof require == "function" && typeof module == "object";
+ var div = typeof document != "undefined" && document.createElement("div");
+ var F = function () {};
+
+ var buster = {
+ bind: function bind(obj, methOrProp) {
+ var method = typeof methOrProp == "string" ? obj[methOrProp] : methOrProp;
+ var args = Array.prototype.slice.call(arguments, 2);
+ return function () {
+ var allArgs = args.concat(Array.prototype.slice.call(arguments));
+ return method.apply(obj, allArgs);
+ };
+ },
+
+ partial: function partial(fn) {
+ var args = [].slice.call(arguments, 1);
+ return function () {
+ return fn.apply(this, args.concat([].slice.call(arguments)));
+ };
+ },
+
+ create: function create(object) {
+ F.prototype = object;
+ return new F();
+ },
+
+ extend: function extend(target) {
+ if (!target) { return; }
+ for (var i = 1, l = arguments.length, prop; i < l; ++i) {
+ for (prop in arguments[i]) {
+ target[prop] = arguments[i][prop];
+ }
+ }
+ return target;
+ },
+
+ nextTick: function nextTick(callback) {
+ if (typeof process != "undefined" && process.nextTick) {
+ return process.nextTick(callback);
+ }
+ setTimeout(callback, 0);
+ },
+
+ functionName: function functionName(func) {
+ if (!func) return "";
+ if (func.displayName) return func.displayName;
+ if (func.name) return func.name;
+ var matches = func.toString().match(/function\s+([^\(]+)/m);
+ return matches && matches[1] || "";
+ },
+
+ isNode: function isNode(obj) {
+ if (!div) return false;
+ try {
+ obj.appendChild(div);
+ obj.removeChild(div);
+ } catch (e) {
+ return false;
+ }
+ return true;
+ },
+
+ isElement: function isElement(obj) {
+ return obj && obj.nodeType === 1 && buster.isNode(obj);
+ },
+
+ isArray: function isArray(arr) {
+ return Object.prototype.toString.call(arr) == "[object Array]";
+ },
+
+ flatten: function flatten(arr) {
+ var result = [], arr = arr || [];
+ for (var i = 0, l = arr.length; i < l; ++i) {
+ result = result.concat(buster.isArray(arr[i]) ? flatten(arr[i]) : arr[i]);
+ }
+ return result;
+ },
+
+ each: function each(arr, callback) {
+ for (var i = 0, l = arr.length; i < l; ++i) {
+ callback(arr[i]);
+ }
+ },
+
+ map: function map(arr, callback) {
+ var results = [];
+ for (var i = 0, l = arr.length; i < l; ++i) {
+ results.push(callback(arr[i]));
+ }
+ return results;
+ },
+
+ parallel: function parallel(fns, callback) {
+ function cb(err, res) {
+ if (typeof callback == "function") {
+ callback(err, res);
+ callback = null;
+ }
+ }
+ if (fns.length == 0) { return cb(null, []); }
+ var remaining = fns.length, results = [];
+ function makeDone(num) {
+ return function done(err, result) {
+ if (err) { return cb(err); }
+ results[num] = result;
+ if (--remaining == 0) { cb(null, results); }
+ };
+ }
+ for (var i = 0, l = fns.length; i < l; ++i) {
+ fns[i](makeDone(i));
+ }
+ },
+
+ series: function series(fns, callback) {
+ function cb(err, res) {
+ if (typeof callback == "function") {
+ callback(err, res);
+ }
+ }
+ var remaining = fns.slice();
+ var results = [];
+ function callNext() {
+ if (remaining.length == 0) return cb(null, results);
+ var promise = remaining.shift()(next);
+ if (promise && typeof promise.then == "function") {
+ promise.then(buster.partial(next, null), next);
+ }
+ }
+ function next(err, result) {
+ if (err) return cb(err);
+ results.push(result);
+ callNext();
+ }
+ callNext();
+ },
+
+ countdown: function countdown(num, done) {
+ return function () {
+ if (--num == 0) done();
+ };
+ }
+ };
+
+ if (typeof process === "object" &&
+ typeof require === "function" && typeof module === "object") {
+ var crypto = require("crypto");
+ var path = require("path");
+
+ buster.tmpFile = function (fileName) {
+ var hashed = crypto.createHash("sha1");
+ hashed.update(fileName);
+ var tmpfileName = hashed.digest("hex");
+
+ if (process.platform == "win32") {
+ return path.join(process.env["TEMP"], tmpfileName);
+ } else {
+ return path.join("/tmp", tmpfileName);
+ }
+ };
+ }
+
+ if (Array.prototype.some) {
+ buster.some = function (arr, fn, thisp) {
+ return arr.some(fn, thisp);
+ };
+ } else {
+ // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some
+ buster.some = function (arr, fun, thisp) {
+ if (arr == null) { throw new TypeError(); }
+ arr = Object(arr);
+ var len = arr.length >>> 0;
+ if (typeof fun !== "function") { throw new TypeError(); }
+
+ for (var i = 0; i < len; i++) {
+ if (arr.hasOwnProperty(i) && fun.call(thisp, arr[i], i, arr)) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+ }
+
+ if (Array.prototype.filter) {
+ buster.filter = function (arr, fn, thisp) {
+ return arr.filter(fn, thisp);
+ };
+ } else {
+ // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter
+ buster.filter = function (fn, thisp) {
+ if (this == null) { throw new TypeError(); }
+
+ var t = Object(this);
+ var len = t.length >>> 0;
+ if (typeof fn != "function") { throw new TypeError(); }
+
+ var res = [];
+ for (var i = 0; i < len; i++) {
+ if (i in t) {
+ var val = t[i]; // in case fun mutates this
+ if (fn.call(thisp, val, i, t)) { res.push(val); }
+ }
+ }
+
+ return res;
+ };
+ }
+
+ if (isNode) {
+ module.exports = buster;
+ buster.eventEmitter = require("./buster-event-emitter");
+ Object.defineProperty(buster, "defineVersionGetter", {
+ get: function () {
+ return require("./define-version-getter");
+ }
+ });
+ }
+
+ return buster.extend(B || {}, buster);
+}(setTimeout, buster));
+if (typeof buster === "undefined") {
+ var buster = {};
+}
+
+if (typeof module === "object" && typeof require === "function") {
+ buster = require("buster-core");
+}
+
+buster.format = buster.format || {};
+buster.format.excludeConstructors = ["Object", /^.$/];
+buster.format.quoteStrings = true;
+
+buster.format.ascii = (function () {
+
+ var hasOwn = Object.prototype.hasOwnProperty;
+
+ var specialObjects = [];
+ if (typeof global != "undefined") {
+ specialObjects.push({ obj: global, value: "[object global]" });
+ }
+ if (typeof document != "undefined") {
+ specialObjects.push({ obj: document, value: "[object HTMLDocument]" });
+ }
+ if (typeof window != "undefined") {
+ specialObjects.push({ obj: window, value: "[object Window]" });
+ }
+
+ function keys(object) {
+ var k = Object.keys && Object.keys(object) || [];
+
+ if (k.length == 0) {
+ for (var prop in object) {
+ if (hasOwn.call(object, prop)) {
+ k.push(prop);
+ }
+ }
+ }
+
+ return k.sort();
+ }
+
+ function isCircular(object, objects) {
+ if (typeof object != "object") {
+ return false;
+ }
+
+ for (var i = 0, l = objects.length; i < l; ++i) {
+ if (objects[i] === object) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ function ascii(object, processed, indent) {
+ if (typeof object == "string") {
+ var quote = typeof this.quoteStrings != "boolean" || this.quoteStrings;
+ return processed || quote ? '"' + object + '"' : object;
+ }
+
+ if (typeof object == "function" && !(object instanceof RegExp)) {
+ return ascii.func(object);
+ }
+
+ processed = processed || [];
+
+ if (isCircular(object, processed)) {
+ return "[Circular]";
+ }
+
+ if (Object.prototype.toString.call(object) == "[object Array]") {
+ return ascii.array.call(this, object, processed);
+ }
+
+ if (!object) {
+ return "" + object;
+ }
+
+ if (buster.isElement(object)) {
+ return ascii.element(object);
+ }
+
+ if (typeof object.toString == "function" &&
+ object.toString !== Object.prototype.toString) {
+ return object.toString();
+ }
+
+ for (var i = 0, l = specialObjects.length; i < l; i++) {
+ if (object === specialObjects[i].obj) {
+ return specialObjects[i].value;
+ }
+ }
+
+ return ascii.object.call(this, object, processed, indent);
+ }
+
+ ascii.func = function (func) {
+ return "function " + buster.functionName(func) + "() {}";
+ };
+
+ ascii.array = function (array, processed) {
+ processed = processed || [];
+ processed.push(array);
+ var pieces = [];
+
+ for (var i = 0, l = array.length; i < l; ++i) {
+ pieces.push(ascii.call(this, array[i], processed));
+ }
+
+ return "[" + pieces.join(", ") + "]";
+ };
+
+ ascii.object = function (object, processed, indent) {
+ processed = processed || [];
+ processed.push(object);
+ indent = indent || 0;
+ var pieces = [], properties = keys(object), prop, str, obj;
+ var is = "";
+ var length = 3;
+
+ for (var i = 0, l = indent; i < l; ++i) {
+ is += " ";
+ }
+
+ for (i = 0, l = properties.length; i < l; ++i) {
+ prop = properties[i];
+ obj = object[prop];
+
+ if (isCircular(obj, processed)) {
+ str = "[Circular]";
+ } else {
+ str = ascii.call(this, obj, processed, indent + 2);
+ }
+
+ str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str;
+ length += str.length;
+ pieces.push(str);
+ }
+
+ var cons = ascii.constructorName.call(this, object);
+ var prefix = cons ? "[" + cons + "] " : ""
+
+ return (length + indent) > 80 ?
+ prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + is + "}" :
+ prefix + "{ " + pieces.join(", ") + " }";
+ };
+
+ ascii.element = function (element) {
+ var tagName = element.tagName.toLowerCase();
+ var attrs = element.attributes, attribute, pairs = [], attrName;
+
+ for (var i = 0, l = attrs.length; i < l; ++i) {
+ attribute = attrs.item(i);
+ attrName = attribute.nodeName.toLowerCase().replace("html:", "");
+
+ if (attrName == "contenteditable" && attribute.nodeValue == "inherit") {
+ continue;
+ }
+
+ if (!!attribute.nodeValue) {
+ pairs.push(attrName + "=\"" + attribute.nodeValue + "\"");
+ }
+ }
+
+ var formatted = "<" + tagName + (pairs.length > 0 ? " " : "");
+ var content = element.innerHTML;
+
+ if (content.length > 20) {
+ content = content.substr(0, 20) + "[...]";
+ }
+
+ var res = formatted + pairs.join(" ") + ">" + content + "</" + tagName + ">";
+
+ return res.replace(/ contentEditable="inherit"/, "");
+ };
+
+ ascii.constructorName = function (object) {
+ var name = buster.functionName(object && object.constructor);
+ var excludes = this.excludeConstructors || buster.format.excludeConstructors || [];
+
+ for (var i = 0, l = excludes.length; i < l; ++i) {
+ if (typeof excludes[i] == "string" && excludes[i] == name) {
+ return "";
+ } else if (excludes[i].test && excludes[i].test(name)) {
+ return "";
+ }
+ }
+
+ return name;
+ };
+
+ return ascii;
+}());
+
+if (typeof module != "undefined") {
+ module.exports = buster.format;
+}
+/*jslint eqeqeq: false, onevar: false, forin: true, nomen: false, regexp: false, plusplus: false*/
+/*global module, require, __dirname, document*/
+/**
+ * Sinon core utilities. For internal use only.
+ *
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2010-2011 Christian Johansen
+ */
+
+var sinon = (function (buster) {
+ var div = typeof document != "undefined" && document.createElement("div");
+ var hasOwn = Object.prototype.hasOwnProperty;
+
+ function isDOMNode(obj) {
+ var success = false;
+
+ try {
+ obj.appendChild(div);
+ success = div.parentNode == obj;
+ } catch (e) {
+ return false;
+ } finally {
+ try {
+ obj.removeChild(div);
+ } catch (e) {
+ // Remove failed, not much we can do about that
+ }
+ }
+
+ return success;
+ }
+
+ function isElement(obj) {
+ return div && obj && obj.nodeType === 1 && isDOMNode(obj);
+ }
+
+ function isFunction(obj) {
+ return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply);
+ }
+
+ function mirrorProperties(target, source) {
+ for (var prop in source) {
+ if (!hasOwn.call(target, prop)) {
+ target[prop] = source[prop];
+ }
+ }
+ }
+
+ var sinon = {
+ wrapMethod: function wrapMethod(object, property, method) {
+ if (!object) {
+ throw new TypeError("Should wrap property of object");
+ }
+
+ if (typeof method != "function") {
+ throw new TypeError("Method wrapper should be function");
+ }
+
+ var wrappedMethod = object[property];
+
+ if (!isFunction(wrappedMethod)) {
+ throw new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
+ property + " as function");
+ }
+
+ if (wrappedMethod.restore && wrappedMethod.restore.sinon) {
+ throw new TypeError("Attempted to wrap " + property + " which is already wrapped");
+ }
+
+ if (wrappedMethod.calledBefore) {
+ var verb = !!wrappedMethod.returns ? "stubbed" : "spied on";
+ throw new TypeError("Attempted to wrap " + property + " which is already " + verb);
+ }
+
+ // IE 8 does not support hasOwnProperty on the window object.
+ var owned = hasOwn.call(object, property);
+ object[property] = method;
+ method.displayName = property;
+
+ method.restore = function () {
+ // For prototype properties try to reset by delete first.
+ // If this fails (ex: localStorage on mobile safari) then force a reset
+ // via direct assignment.
+ if (!owned) {
+ delete object[property];
+ }
+ if (object[property] === method) {
+ object[property] = wrappedMethod;
+ }
+ };
+
+ method.restore.sinon = true;
+ mirrorProperties(method, wrappedMethod);
+
+ return method;
+ },
+
+ extend: function extend(target) {
+ for (var i = 1, l = arguments.length; i < l; i += 1) {
+ for (var prop in arguments[i]) {
+ if (arguments[i].hasOwnProperty(prop)) {
+ target[prop] = arguments[i][prop];
+ }
+
+ // DONT ENUM bug, only care about toString
+ if (arguments[i].hasOwnProperty("toString") &&
+ arguments[i].toString != target.toString) {
+ target.toString = arguments[i].toString;
+ }
+ }
+ }
+
+ return target;
+ },
+
+ create: function create(proto) {
+ var F = function () {};
+ F.prototype = proto;
+ return new F();
+ },
+
+ deepEqual: function deepEqual(a, b) {
+ if (sinon.match && sinon.match.isMatcher(a)) {
+ return a.test(b);
+ }
+ if (typeof a != "object" || typeof b != "object") {
+ return a === b;
+ }
+
+ if (isElement(a) || isElement(b)) {
+ return a === b;
+ }
+
+ if (a === b) {
+ return true;
+ }
+
+ if ((a === null && b !== null) || (a !== null && b === null)) {
+ return false;
+ }
+
+ var aString = Object.prototype.toString.call(a);
+ if (aString != Object.prototype.toString.call(b)) {
+ return false;
+ }
+
+ if (aString == "[object Array]") {
+ if (a.length !== b.length) {
+ return false;
+ }
+
+ for (var i = 0, l = a.length; i < l; i += 1) {
+ if (!deepEqual(a[i], b[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ var prop, aLength = 0, bLength = 0;
+
+ for (prop in a) {
+ aLength += 1;
+
+ if (!deepEqual(a[prop], b[prop])) {
+ return false;
+ }
+ }
+
+ for (prop in b) {
+ bLength += 1;
+ }
+
+ if (aLength != bLength) {
+ return false;
+ }
+
+ return true;
+ },
+
+ functionName: function functionName(func) {
+ var name = func.displayName || func.name;
+
+ // Use function decomposition as a last resort to get function
+ // name. Does not rely on function decomposition to work - if it
+ // doesn't debugging will be slightly less informative
+ // (i.e. toString will say 'spy' rather than 'myFunc').
+ if (!name) {
+ var matches = func.toString().match(/function ([^\s\(]+)/);
+ name = matches && matches[1];
+ }
+
+ return name;
+ },
+
+ functionToString: function toString() {
+ if (this.getCall && this.callCount) {
+ var thisValue, prop, i = this.callCount;
+
+ while (i--) {
+ thisValue = this.getCall(i).thisValue;
+
+ for (prop in thisValue) {
+ if (thisValue[prop] === this) {
+ return prop;
+ }
+ }
+ }
+ }
+
+ return this.displayName || "sinon fake";
+ },
+
+ getConfig: function (custom) {
+ var config = {};
+ custom = custom || {};
+ var defaults = sinon.defaultConfig;
+
+ for (var prop in defaults) {
+ if (defaults.hasOwnProperty(prop)) {
+ config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop];
+ }
+ }
+
+ return config;
+ },
+
+ format: function (val) {
+ return "" + val;
+ },
+
+ defaultConfig: {
+ injectIntoThis: true,
+ injectInto: null,
+ properties: ["spy", "stub", "mock", "clock", "server", "requests"],
+ useFakeTimers: true,
+ useFakeServer: true
+ },
+
+ timesInWords: function timesInWords(count) {
+ return count == 1 && "once" ||
+ count == 2 && "twice" ||
+ count == 3 && "thrice" ||
+ (count || 0) + " times";
+ },
+
+ calledInOrder: function (spies) {
+ for (var i = 1, l = spies.length; i < l; i++) {
+ if (!spies[i - 1].calledBefore(spies[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ },
+
+ orderByFirstCall: function (spies) {
+ return spies.sort(function (a, b) {
+ // uuid, won't ever be equal
+ var aCall = a.getCall(0);
+ var bCall = b.getCall(0);
+ var aId = aCall && aCall.callId || -1;
+ var bId = bCall && bCall.callId || -1;
+
+ return aId < bId ? -1 : 1;
+ });
+ },
+
+ log: function () {},
+
+ logError: function (label, err) {
+ var msg = label + " threw exception: "
+ sinon.log(msg + "[" + err.name + "] " + err.message);
+ if (err.stack) { sinon.log(err.stack); }
+
+ setTimeout(function () {
+ err.message = msg + err.message;
+ throw err;
+ }, 0);
+ },
+
+ typeOf: function (value) {
+ if (value === null) {
+ return "null";
+ }
+ else if (value === undefined) {
+ return "undefined";
+ }
+ var string = Object.prototype.toString.call(value);
+ return string.substring(8, string.length - 1).toLowerCase();
+ }
+ };
+
+ var isNode = typeof module == "object" && typeof require == "function";
+
+ if (isNode) {
+ try {
+ buster = { format: require("buster-format") };
+ } catch (e) {}
+ module.exports = sinon;
+ module.exports.spy = require("./sinon/spy");
+ module.exports.stub = require("./sinon/stub");
+ module.exports.mock = require("./sinon/mock");
+ module.exports.collection = require("./sinon/collection");
+ module.exports.assert = require("./sinon/assert");
+ module.exports.sandbox = require("./sinon/sandbox");
+ module.exports.test = require("./sinon/test");
+ module.exports.testCase = require("./sinon/test_case");
+ module.exports.assert = require("./sinon/assert");
+ module.exports.match = require("./sinon/match");
+ }
+
+ if (buster) {
+ var formatter = sinon.create(buster.format);
+ formatter.quoteStrings = false;
+ sinon.format = function () {
+ return formatter.ascii.apply(formatter, arguments);
+ };
+ } else if (isNode) {
+ try {
+ var util = require("util");
+ sinon.format = function (value) {
+ return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value;
+ };
+ } catch (e) {
+ /* Node, but no util module - would be very old, but better safe than
+ sorry */
+ }
+ }
+
+ return sinon;
+}(typeof buster == "object" && buster));
+
+/* @depend ../sinon.js */
+/*jslint eqeqeq: false, onevar: false, plusplus: false*/
+/*global module, require, sinon*/
+/**
+ * Match functions
+ *
+ * @author Maximilian Antoni ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2012 Maximilian Antoni
+ */
+
+(function (sinon) {
+ var commonJSModule = typeof module == "object" && typeof require == "function";
+
+ if (!sinon && commonJSModule) {
+ sinon = require("../sinon");
+ }
+
+ if (!sinon) {
+ return;
+ }
+
+ function assertType(value, type, name) {
+ var actual = sinon.typeOf(value);
+ if (actual !== type) {
+ throw new TypeError("Expected type of " + name + " to be " +
+ type + ", but was " + actual);
+ }
+ }
+
+ var matcher = {
+ toString: function () {
+ return this.message;
+ }
+ };
+
+ function isMatcher(object) {
+ return matcher.isPrototypeOf(object);
+ }
+
+ function matchObject(expectation, actual) {
+ if (actual === null || actual === undefined) {
+ return false;
+ }
+ for (var key in expectation) {
+ if (expectation.hasOwnProperty(key)) {
+ var exp = expectation[key];
+ var act = actual[key];
+ if (match.isMatcher(exp)) {
+ if (!exp.test(act)) {
+ return false;
+ }
+ } else if (sinon.typeOf(exp) === "object") {
+ if (!matchObject(exp, act)) {
+ return false;
+ }
+ } else if (!sinon.deepEqual(exp, act)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ matcher.or = function (m2) {
+ if (!isMatcher(m2)) {
+ throw new TypeError("Matcher expected");
+ }
+ var m1 = this;
+ var or = sinon.create(matcher);
+ or.test = function (actual) {
+ return m1.test(actual) || m2.test(actual);
+ };
+ or.message = m1.message + ".or(" + m2.message + ")";
+ return or;
+ };
+
+ matcher.and = function (m2) {
+ if (!isMatcher(m2)) {
+ throw new TypeError("Matcher expected");
+ }
+ var m1 = this;
+ var and = sinon.create(matcher);
+ and.test = function (actual) {
+ return m1.test(actual) && m2.test(actual);
+ };
+ and.message = m1.message + ".and(" + m2.message + ")";
+ return and;
+ };
+
+ var match = function (expectation, message) {
+ var m = sinon.create(matcher);
+ var type = sinon.typeOf(expectation);
+ switch (type) {
+ case "object":
+ if (typeof expectation.test === "function") {
+ m.test = function (actual) {
+ return expectation.test(actual) === true;
+ };
+ m.message = "match(" + sinon.functionName(expectation.test) + ")";
+ return m;
+ }
+ var str = [];
+ for (var key in expectation) {
+ if (expectation.hasOwnProperty(key)) {
+ str.push(key + ": " + expectation[key]);
+ }
+ }
+ m.test = function (actual) {
+ return matchObject(expectation, actual);
+ };
+ m.message = "match(" + str.join(", ") + ")";
+ break;
+ case "number":
+ m.test = function (actual) {
+ return expectation == actual;
+ };
+ break;
+ case "string":
+ m.test = function (actual) {
+ if (typeof actual !== "string") {
+ return false;
+ }
+ return actual.indexOf(expectation) !== -1;
+ };
+ m.message = "match(\"" + expectation + "\")";
+ break;
+ case "regexp":
+ m.test = function (actual) {
+ if (typeof actual !== "string") {
+ return false;
+ }
+ return expectation.test(actual);
+ };
+ break;
+ case "function":
+ m.test = expectation;
+ if (message) {
+ m.message = message;
+ } else {
+ m.message = "match(" + sinon.functionName(expectation) + ")";
+ }
+ break;
+ default:
+ m.test = function (actual) {
+ return sinon.deepEqual(expectation, actual);
+ };
+ }
+ if (!m.message) {
+ m.message = "match(" + expectation + ")";
+ }
+ return m;
+ };
+
+ match.isMatcher = isMatcher;
+
+ match.any = match(function () {
+ return true;
+ }, "any");
+
+ match.defined = match(function (actual) {
+ return actual !== null && actual !== undefined;
+ }, "defined");
+
+ match.truthy = match(function (actual) {
+ return !!actual;
+ }, "truthy");
+
+ match.falsy = match(function (actual) {
+ return !actual;
+ }, "falsy");
+
+ match.same = function (expectation) {
+ return match(function (actual) {
+ return expectation === actual;
+ }, "same(" + expectation + ")");
+ };
+
+ match.typeOf = function (type) {
+ assertType(type, "string", "type");
+ return match(function (actual) {
+ return sinon.typeOf(actual) === type;
+ }, "typeOf(\"" + type + "\")");
+ };
+
+ match.instanceOf = function (type) {
+ assertType(type, "function", "type");
+ return match(function (actual) {
+ return actual instanceof type;
+ }, "instanceOf(" + sinon.functionName(type) + ")");
+ };
+
+ function createPropertyMatcher(propertyTest, messagePrefix) {
+ return function (property, value) {
+ assertType(property, "string", "property");
+ var onlyProperty = arguments.length === 1;
+ var message = messagePrefix + "(\"" + property + "\"";
+ if (!onlyProperty) {
+ message += ", " + value;
+ }
+ message += ")";
+ return match(function (actual) {
+ if (actual === undefined || actual === null ||
+ !propertyTest(actual, property)) {
+ return false;
+ }
+ return onlyProperty || sinon.deepEqual(value, actual[property]);
+ }, message);
+ };
+ }
+
+ match.has = createPropertyMatcher(function (actual, property) {
+ if (typeof actual === "object") {
+ return property in actual;
+ }
+ return actual[property] !== undefined;
+ }, "has");
+
+ match.hasOwn = createPropertyMatcher(function (actual, property) {
+ return actual.hasOwnProperty(property);
+ }, "hasOwn");
+
+ match.bool = match.typeOf("boolean");
+ match.number = match.typeOf("number");
+ match.string = match.typeOf("string");
+ match.object = match.typeOf("object");
+ match.func = match.typeOf("function");
+ match.array = match.typeOf("array");
+ match.regexp = match.typeOf("regexp");
+ match.date = match.typeOf("date");
+
+ if (commonJSModule) {
+ module.exports = match;
+ } else {
+ sinon.match = match;
+ }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend ../sinon.js
+ * @depend match.js
+ */
+/*jslint eqeqeq: false, onevar: false, plusplus: false*/
+/*global module, require, sinon*/
+/**
+ * Spy functions
+ *
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2010-2011 Christian Johansen
+ */
+
+(function (sinon) {
+ var commonJSModule = typeof module == "object" && typeof require == "function";
+ var spyCall;
+ var callId = 0;
+ var push = [].push;
+ var slice = Array.prototype.slice;
+
+ if (!sinon && commonJSModule) {
+ sinon = require("../sinon");
+ }
+
+ if (!sinon) {
+ return;
+ }
+
+ function spy(object, property) {
+ if (!property && typeof object == "function") {
+ return spy.create(object);
+ }
+
+ if (!object && !property) {
+ return spy.create(function () {});
+ }
+
+ var method = object[property];
+ return sinon.wrapMethod(object, property, spy.create(method));
+ }
+
+ sinon.extend(spy, (function () {
+
+ function delegateToCalls(api, method, matchAny, actual, notCalled) {
+ api[method] = function () {
+ if (!this.called) {
+ if (notCalled) {
+ return notCalled.apply(this, arguments);
+ }
+ return false;
+ }
+
+ var currentCall;
+ var matches = 0;
+
+ for (var i = 0, l = this.callCount; i < l; i += 1) {
+ currentCall = this.getCall(i);
+
+ if (currentCall[actual || method].apply(currentCall, arguments)) {
+ matches += 1;
+
+ if (matchAny) {
+ return true;
+ }
+ }
+ }
+
+ return matches === this.callCount;
+ };
+ }
+
+ function matchingFake(fakes, args, strict) {
+ if (!fakes) {
+ return;
+ }
+
+ var alen = args.length;
+
+ for (var i = 0, l = fakes.length; i < l; i++) {
+ if (fakes[i].matches(args, strict)) {
+ return fakes[i];
+ }
+ }
+ }
+
+ function incrementCallCount() {
+ this.called = true;
+ this.callCount += 1;
+ this.notCalled = false;
+ this.calledOnce = this.callCount == 1;
+ this.calledTwice = this.callCount == 2;
+ this.calledThrice = this.callCount == 3;
+ }
+
+ function createCallProperties() {
+ this.firstCall = this.getCall(0);
+ this.secondCall = this.getCall(1);
+ this.thirdCall = this.getCall(2);
+ this.lastCall = this.getCall(this.callCount - 1);
+ }
+
+ var vars = "a,b,c,d,e,f,g,h,i,j,k,l";
+ function createProxy(func) {
+ // Retain the function length:
+ var p;
+ if (func.length) {
+ eval("p = (function proxy(" + vars.substring(0, func.length * 2 - 1) +
+ ") { return p.invoke(func, this, slice.call(arguments)); });");
+ }
+ else {
+ p = function proxy() {
+ return p.invoke(func, this, slice.call(arguments));
+ };
+ }
+ return p;
+ }
+
+ var uuid = 0;
+
+ // Public API
+ var spyApi = {
+ reset: function () {
+ this.called = false;
+ this.notCalled = true;
+ this.calledOnce = false;
+ this.calledTwice = false;
+ this.calledThrice = false;
+ this.callCount = 0;
+ this.firstCall = null;
+ this.secondCall = null;
+ this.thirdCall = null;
+ this.lastCall = null;
+ this.args = [];
+ this.returnValues = [];
+ this.thisValues = [];
+ this.exceptions = [];
+ this.callIds = [];
+ if (this.fakes) {
+ for (var i = 0; i < this.fakes.length; i++) {
+ this.fakes[i].reset();
+ }
+ }
+ },
+
+ create: function create(func) {
+ var name;
+
+ if (typeof func != "function") {
+ func = function () {};
+ } else {
+ name = sinon.functionName(func);
+ }
+
+ var proxy = createProxy(func);
+
+ sinon.extend(proxy, spy);
+ delete proxy.create;
+ sinon.extend(proxy, func);
+
+ proxy.reset();
+ proxy.prototype = func.prototype;
+ proxy.displayName = name || "spy";
+ proxy.toString = sinon.functionToString;
+ proxy._create = sinon.spy.create;
+ proxy.id = "spy#" + uuid++;
+
+ return proxy;
+ },
+
+ invoke: function invoke(func, thisValue, args) {
+ var matching = matchingFake(this.fakes, args);
+ var exception, returnValue;
+
+ incrementCallCount.call(this);
+ push.call(this.thisValues, thisValue);
+ push.call(this.args, args);
+ push.call(this.callIds, callId++);
+
+ try {
+ if (matching) {
+ returnValue = matching.invoke(func, thisValue, args);
+ } else {
+ returnValue = (this.func || func).apply(thisValue, args);
+ }
+ } catch (e) {
+ push.call(this.returnValues, undefined);
+ exception = e;
+ throw e;
+ } finally {
+ push.call(this.exceptions, exception);
+ }
+
+ push.call(this.returnValues, returnValue);
+
+ createCallProperties.call(this);
+
+ return returnValue;
+ },
+
+ getCall: function getCall(i) {
+ if (i < 0 || i >= this.callCount) {
+ return null;
+ }
+
+ return spyCall.create(this, this.thisValues[i], this.args[i],
+ this.returnValues[i], this.exceptions[i],
+ this.callIds[i]);
+ },
+
+ calledBefore: function calledBefore(spyFn) {
+ if (!this.called) {
+ return false;
+ }
+
+ if (!spyFn.called) {
+ return true;
+ }
+
+ return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1];
+ },
+
+ calledAfter: function calledAfter(spyFn) {
+ if (!this.called || !spyFn.called) {
+ return false;
+ }
+
+ return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1];
+ },
+
+ withArgs: function () {
+ var args = slice.call(arguments);
+
+ if (this.fakes) {
+ var match = matchingFake(this.fakes, args, true);
+
+ if (match) {
+ return match;
+ }
+ } else {
+ this.fakes = [];
+ }
+
+ var original = this;
+ var fake = this._create();
+ fake.matchingAguments = args;
+ push.call(this.fakes, fake);
+
+ fake.withArgs = function () {
+ return original.withArgs.apply(original, arguments);
+ };
+
+ for (var i = 0; i < this.args.length; i++) {
+ if (fake.matches(this.args[i])) {
+ incrementCallCount.call(fake);
+ push.call(fake.thisValues, this.thisValues[i]);
+ push.call(fake.args, this.args[i]);
+ push.call(fake.returnValues, this.returnValues[i]);
+ push.call(fake.exceptions, this.exceptions[i]);
+ push.call(fake.callIds, this.callIds[i]);
+ }
+ }
+ createCallProperties.call(fake);
+
+ return fake;
+ },
+
+ matches: function (args, strict) {
+ var margs = this.matchingAguments;
+
+ if (margs.length <= args.length &&
+ sinon.deepEqual(margs, args.slice(0, margs.length))) {
+ return !strict || margs.length == args.length;
+ }
+ },
+
+ printf: function (format) {
+ var spy = this;
+ var args = slice.call(arguments, 1);
+ var formatter;
+
+ return (format || "").replace(/%(.)/g, function (match, specifyer) {
+ formatter = spyApi.formatters[specifyer];
+
+ if (typeof formatter == "function") {
+ return formatter.call(null, spy, args);
+ } else if (!isNaN(parseInt(specifyer), 10)) {
+ return sinon.format(args[specifyer - 1]);
+ }
+
+ return "%" + specifyer;
+ });
+ }
+ };
+
+ delegateToCalls(spyApi, "calledOn", true);
+ delegateToCalls(spyApi, "alwaysCalledOn", false, "calledOn");
+ delegateToCalls(spyApi, "calledWith", true);
+ delegateToCalls(spyApi, "calledWithMatch", true);
+ delegateToCalls(spyApi, "alwaysCalledWith", false, "calledWith");
+ delegateToCalls(spyApi, "alwaysCalledWithMatch", false, "calledWithMatch");
+ delegateToCalls(spyApi, "calledWithExactly", true);
+ delegateToCalls(spyApi, "alwaysCalledWithExactly", false, "calledWithExactly");
+ delegateToCalls(spyApi, "neverCalledWith", false, "notCalledWith",
+ function () { return true; });
+ delegateToCalls(spyApi, "neverCalledWithMatch", false, "notCalledWithMatch",
+ function () { return true; });
+ delegateToCalls(spyApi, "threw", true);
+ delegateToCalls(spyApi, "alwaysThrew", false, "threw");
+ delegateToCalls(spyApi, "returned", true);
+ delegateToCalls(spyApi, "alwaysReturned", false, "returned");
+ delegateToCalls(spyApi, "calledWithNew", true);
+ delegateToCalls(spyApi, "alwaysCalledWithNew", false, "calledWithNew");
+ delegateToCalls(spyApi, "callArg", false, "callArgWith", function () {
+ throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
+ });
+ spyApi.callArgWith = spyApi.callArg;
+ delegateToCalls(spyApi, "yield", false, "yield", function () {
+ throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
+ });
+ // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode.
+ spyApi.invokeCallback = spyApi.yield;
+ delegateToCalls(spyApi, "yieldTo", false, "yieldTo", function (property) {
+ throw new Error(this.toString() + " cannot yield to '" + property +
+ "' since it was not yet invoked.");
+ });
+
+ spyApi.formatters = {
+ "c": function (spy) {
+ return sinon.timesInWords(spy.callCount);
+ },
+
+ "n": function (spy) {
+ return spy.toString();
+ },
+
+ "C": function (spy) {
+ var calls = [];
+
+ for (var i = 0, l = spy.callCount; i < l; ++i) {
+ push.call(calls, " " + spy.getCall(i).toString());
+ }
+
+ return calls.length > 0 ? "\n" + calls.join("\n") : "";
+ },
+
+ "t": function (spy) {
+ var objects = [];
+
+ for (var i = 0, l = spy.callCount; i < l; ++i) {
+ push.call(objects, sinon.format(spy.thisValues[i]));
+ }
+
+ return objects.join(", ");
+ },
+
+ "*": function (spy, args) {
+ var formatted = [];
+
+ for (var i = 0, l = args.length; i < l; ++i) {
+ push.call(formatted, sinon.format(args[i]));
+ }
+
+ return formatted.join(", ");
+ }
+ };
+
+ return spyApi;
+ }()));
+
+ spyCall = (function () {
+
+ function throwYieldError(proxy, text, args) {
+ var msg = sinon.functionName(proxy) + text;
+ if (args.length) {
+ msg += " Received [" + slice.call(args).join(", ") + "]";
+ }
+ throw new Error(msg);
+ }
+
+ var callApi = {
+ create: function create(spy, thisValue, args, returnValue, exception, id) {
+ var proxyCall = sinon.create(spyCall);
+ delete proxyCall.create;
+ proxyCall.proxy = spy;
+ proxyCall.thisValue = thisValue;
+ proxyCall.args = args;
+ proxyCall.returnValue = returnValue;
+ proxyCall.exception = exception;
+ proxyCall.callId = typeof id == "number" && id || callId++;
+
+ return proxyCall;
+ },
+
+ calledOn: function calledOn(thisValue) {
+ if (sinon.match && sinon.match.isMatcher(thisValue)) {
+ return thisValue.test(this.thisValue);
+ }
+ return this.thisValue === thisValue;
+ },
+
+ calledWith: function calledWith() {
+ for (var i = 0, l = arguments.length; i < l; i += 1) {
+ if (!sinon.deepEqual(arguments[i], this.args[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ },
+
+ calledWithMatch: function calledWithMatch() {
+ for (var i = 0, l = arguments.length; i < l; i += 1) {
+ var actual = this.args[i];
+ var expectation = arguments[i];
+ if (!sinon.match || !sinon.match(expectation).test(actual)) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ calledWithExactly: function calledWithExactly() {
+ return arguments.length == this.args.length &&
+ this.calledWith.apply(this, arguments);
+ },
+
+ notCalledWith: function notCalledWith() {
+ return !this.calledWith.apply(this, arguments);
+ },
+
+ notCalledWithMatch: function notCalledWithMatch() {
+ return !this.calledWithMatch.apply(this, arguments);
+ },
+
+ returned: function returned(value) {
+ return sinon.deepEqual(value, this.returnValue);
+ },
+
+ threw: function threw(error) {
+ if (typeof error == "undefined" || !this.exception) {
+ return !!this.exception;
+ }
+
+ if (typeof error == "string") {
+ return this.exception.name == error;
+ }
+
+ return this.exception === error;
+ },
+
+ calledWithNew: function calledWithNew(thisValue) {
+ return this.thisValue instanceof this.proxy;
+ },
+
+ calledBefore: function (other) {
+ return this.callId < other.callId;
+ },
+
+ calledAfter: function (other) {
+ return this.callId > other.callId;
+ },
+
+ callArg: function (pos) {
+ this.args[pos]();
+ },
+
+ callArgWith: function (pos) {
+ var args = slice.call(arguments, 1);
+ this.args[pos].apply(null, args);
+ },
+
+ "yield": function () {
+ var args = this.args;
+ for (var i = 0, l = args.length; i < l; ++i) {
+ if (typeof args[i] === "function") {
+ args[i].apply(null, slice.call(arguments));
+ return;
+ }
+ }
+ throwYieldError(this.proxy, " cannot yield since no callback was passed.", args);
+ },
+
+ yieldTo: function (prop) {
+ var args = this.args;
+ for (var i = 0, l = args.length; i < l; ++i) {
+ if (args[i] && typeof args[i][prop] === "function") {
+ args[i][prop].apply(null, slice.call(arguments, 1));
+ return;
+ }
+ }
+ throwYieldError(this.proxy, " cannot yield to '" + prop +
+ "' since no callback was passed.", args);
+ },
+
+ toString: function () {
+ var callStr = this.proxy.toString() + "(";
+ var args = [];
+
+ for (var i = 0, l = this.args.length; i < l; ++i) {
+ push.call(args, sinon.format(this.args[i]));
+ }
+
+ callStr = callStr + args.join(", ") + ")";
+
+ if (typeof this.returnValue != "undefined") {
+ callStr += " => " + sinon.format(this.returnValue);
+ }
+
+ if (this.exception) {
+ callStr += " !" + this.exception.name;
+
+ if (this.exception.message) {
+ callStr += "(" + this.exception.message + ")";
+ }
+ }
+
+ return callStr;
+ }
+ };
+ callApi.invokeCallback = callApi.yield;
+ return callApi;
+ }());
+
+ spy.spyCall = spyCall;
+
+ // This steps outside the module sandbox and will be removed
+ sinon.spyCall = spyCall;
+
+ if (commonJSModule) {
+ module.exports = spy;
+ } else {
+ sinon.spy = spy;
+ }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend ../sinon.js
+ * @depend spy.js
+ */
+/*jslint eqeqeq: false, onevar: false*/
+/*global module, require, sinon*/
+/**
+ * Stub functions
+ *
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2010-2011 Christian Johansen
+ */
+
+(function (sinon) {
+ var commonJSModule = typeof module == "object" && typeof require == "function";
+
+ if (!sinon && commonJSModule) {
+ sinon = require("../sinon");
+ }
+
+ if (!sinon) {
+ return;
+ }
+
+ function stub(object, property, func) {
+ if (!!func && typeof func != "function") {
+ throw new TypeError("Custom stub should be function");
+ }
+
+ var wrapper;
+
+ if (func) {
+ wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func;
+ } else {
+ wrapper = stub.create();
+ }
+
+ if (!object && !property) {
+ return sinon.stub.create();
+ }
+
+ if (!property && !!object && typeof object == "object") {
+ for (var prop in object) {
+ if (typeof object[prop] === "function") {
+ stub(object, prop);
+ }
+ }
+
+ return object;
+ }
+
+ return sinon.wrapMethod(object, property, wrapper);
+ }
+
+ function getChangingValue(stub, property) {
+ var index = stub.callCount - 1;
+ var prop = index in stub[property] ? stub[property][index] : stub[property + "Last"];
+ stub[property + "Last"] = prop;
+
+ return prop;
+ }
+
+ function getCallback(stub, args) {
+ var callArgAt = getChangingValue(stub, "callArgAts");
+
+ if (callArgAt < 0) {
+ var callArgProp = getChangingValue(stub, "callArgProps");
+
+ for (var i = 0, l = args.length; i < l; ++i) {
+ if (!callArgProp && typeof args[i] == "function") {
+ return args[i];
+ }
+
+ if (callArgProp && args[i] &&
+ typeof args[i][callArgProp] == "function") {
+ return args[i][callArgProp];
+ }
+ }
+
+ return null;
+ }
+
+ return args[callArgAt];
+ }
+
+ var join = Array.prototype.join;
+
+ function getCallbackError(stub, func, args) {
+ if (stub.callArgAtsLast < 0) {
+ var msg;
+
+ if (stub.callArgPropsLast) {
+ msg = sinon.functionName(stub) +
+ " expected to yield to '" + stub.callArgPropsLast +
+ "', but no object with such a property was passed."
+ } else {
+ msg = sinon.functionName(stub) +
+ " expected to yield, but no callback was passed."
+ }
+
+ if (args.length > 0) {
+ msg += " Received [" + join.call(args, ", ") + "]";
+ }
+
+ return msg;
+ }
+
+ return "argument at index " + stub.callArgAtsLast + " is not a function: " + func;
+ }
+
+ var nextTick = (function () {
+ if (typeof process === "object" && typeof process.nextTick === "function") {
+ return process.nextTick;
+ } else if (typeof msSetImmediate === "function") {
+ return msSetImmediate.bind(window);
+ } else if (typeof setImmediate === "function") {
+ return setImmediate;
+ } else {
+ return function (callback) {
+ setTimeout(callback, 0);
+ };
+ }
+ })();
+
+ function callCallback(stub, args) {
+ if (stub.callArgAts.length > 0) {
+ var func = getCallback(stub, args);
+
+ if (typeof func != "function") {
+ throw new TypeError(getCallbackError(stub, func, args));
+ }
+
+ var index = stub.callCount - 1;
+
+ var callbackArguments = getChangingValue(stub, "callbackArguments");
+ var callbackContext = getChangingValue(stub, "callbackContexts");
+
+ if (stub.callbackAsync) {
+ nextTick(function() {
+ func.apply(callbackContext, callbackArguments);
+ });
+ } else {
+ func.apply(callbackContext, callbackArguments);
+ }
+ }
+ }
+
+ var uuid = 0;
+
+ sinon.extend(stub, (function () {
+ var slice = Array.prototype.slice, proto;
+
+ function throwsException(error, message) {
+ if (typeof error == "string") {
+ this.exception = new Error(message || "");
+ this.exception.name = error;
+ } else if (!error) {
+ this.exception = new Error("Error");
+ } else {
+ this.exception = error;
+ }
+
+ return this;
+ }
+
+ proto = {
+ create: function create() {
+ var functionStub = function () {
+
+ callCallback(functionStub, arguments);
+
+ if (functionStub.exception) {
+ throw functionStub.exception;
+ } else if (typeof functionStub.returnArgAt == 'number') {
+ return arguments[functionStub.returnArgAt];
+ } else if (functionStub.returnThis) {
+ return this;
+ }
+ return functionStub.returnValue;
+ };
+
+ functionStub.id = "stub#" + uuid++;
+ var orig = functionStub;
+ functionStub = sinon.spy.create(functionStub);
+ functionStub.func = orig;
+
+ functionStub.callArgAts = [];
+ functionStub.callbackArguments = [];
+ functionStub.callbackContexts = [];
+ functionStub.callArgProps = [];
+
+ sinon.extend(functionStub, stub);
+ functionStub._create = sinon.stub.create;
+ functionStub.displayName = "stub";
+ functionStub.toString = sinon.functionToString;
+
+ return functionStub;
+ },
+
+ returns: function returns(value) {
+ this.returnValue = value;
+
+ return this;
+ },
+
+ returnsArg: function returnsArg(pos) {
+ if (typeof pos != "number") {
+ throw new TypeError("argument index is not number");
+ }
+
+ this.returnArgAt = pos;
+
+ return this;
+ },
+
+ returnsThis: function returnsThis() {
+ this.returnThis = true;
+
+ return this;
+ },
+
+ "throws": throwsException,
+ throwsException: throwsException,
+
+ callsArg: function callsArg(pos) {
+ if (typeof pos != "number") {
+ throw new TypeError("argument index is not number");
+ }
+
+ this.callArgAts.push(pos);
+ this.callbackArguments.push([]);
+ this.callbackContexts.push(undefined);
+ this.callArgProps.push(undefined);
+
+ return this;
+ },
+
+ callsArgOn: function callsArgOn(pos, context) {
+ if (typeof pos != "number") {
+ throw new TypeError("argument index is not number");
+ }
+ if (typeof context != "object") {
+ throw new TypeError("argument context is not an object");
+ }
+
+ this.callArgAts.push(pos);
+ this.callbackArguments.push([]);
+ this.callbackContexts.push(context);
+ this.callArgProps.push(undefined);
+
+ return this;
+ },
+
+ callsArgWith: function callsArgWith(pos) {
+ if (typeof pos != "number") {
+ throw new TypeError("argument index is not number");
+ }
+
+ this.callArgAts.push(pos);
+ this.callbackArguments.push(slice.call(arguments, 1));
+ this.callbackContexts.push(undefined);
+ this.callArgProps.push(undefined);
+
+ return this;
+ },
+
+ callsArgOnWith: function callsArgWith(pos, context) {
+ if (typeof pos != "number") {
+ throw new TypeError("argument index is not number");
+ }
+ if (typeof context != "object") {
+ throw new TypeError("argument context is not an object");
+ }
+
+ this.callArgAts.push(pos);
+ this.callbackArguments.push(slice.call(arguments, 2));
+ this.callbackContexts.push(context);
+ this.callArgProps.push(undefined);
+
+ return this;
+ },
+
+ yields: function () {
+ this.callArgAts.push(-1);
+ this.callbackArguments.push(slice.call(arguments, 0));
+ this.callbackContexts.push(undefined);
+ this.callArgProps.push(undefined);
+
+ return this;
+ },
+
+ yieldsOn: function (context) {
+ if (typeof context != "object") {
+ throw new TypeError("argument context is not an object");
+ }
+
+ this.callArgAts.push(-1);
+ this.callbackArguments.push(slice.call(arguments, 1));
+ this.callbackContexts.push(context);
+ this.callArgProps.push(undefined);
+
+ return this;
+ },
+
+ yieldsTo: function (prop) {
+ this.callArgAts.push(-1);
+ this.callbackArguments.push(slice.call(arguments, 1));
+ this.callbackContexts.push(undefined);
+ this.callArgProps.push(prop);
+
+ return this;
+ },
+
+ yieldsToOn: function (prop, context) {
+ if (typeof context != "object") {
+ throw new TypeError("argument context is not an object");
+ }
+
+ this.callArgAts.push(-1);
+ this.callbackArguments.push(slice.call(arguments, 2));
+ this.callbackContexts.push(context);
+ this.callArgProps.push(prop);
+
+ return this;
+ }
+ };
+
+ // create asynchronous versions of callsArg* and yields* methods
+ for (var method in proto) {
+ // need to avoid creating anotherasync versions of the newly added async methods
+ if (proto.hasOwnProperty(method) &&
+ method.match(/^(callsArg|yields|thenYields$)/) &&
+ !method.match(/Async/)) {
+ proto[method + 'Async'] = (function (syncFnName) {
+ return function () {
+ this.callbackAsync = true;
+ return this[syncFnName].apply(this, arguments);
+ };
+ })(method);
+ }
+ }
+
+ return proto;
+
+ }()));
+
+ if (commonJSModule) {
+ module.exports = stub;
+ } else {
+ sinon.stub = stub;
+ }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend ../sinon.js
+ * @depend stub.js
+ */
+/*jslint eqeqeq: false, onevar: false, nomen: false*/
+/*global module, require, sinon*/
+/**
+ * Mock functions.
+ *
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2010-2011 Christian Johansen
+ */
+
+(function (sinon) {
+ var commonJSModule = typeof module == "object" && typeof require == "function";
+ var push = [].push;
+
+ if (!sinon && commonJSModule) {
+ sinon = require("../sinon");
+ }
+
+ if (!sinon) {
+ return;
+ }
+
+ function mock(object) {
+ if (!object) {
+ return sinon.expectation.create("Anonymous mock");
+ }
+
+ return mock.create(object);
+ }
+
+ sinon.mock = mock;
+
+ sinon.extend(mock, (function () {
+ function each(collection, callback) {
+ if (!collection) {
+ return;
+ }
+
+ for (var i = 0, l = collection.length; i < l; i += 1) {
+ callback(collection[i]);
+ }
+ }
+
+ return {
+ create: function create(object) {
+ if (!object) {
+ throw new TypeError("object is null");
+ }
+
+ var mockObject = sinon.extend({}, mock);
+ mockObject.object = object;
+ delete mockObject.create;
+
+ return mockObject;
+ },
+
+ expects: function expects(method) {
+ if (!method) {
+ throw new TypeError("method is falsy");
+ }
+
+ if (!this.expectations) {
+ this.expectations = {};
+ this.proxies = [];
+ }
+
+ if (!this.expectations[method]) {
+ this.expectations[method] = [];
+ var mockObject = this;
+
+ sinon.wrapMethod(this.object, method, function () {
+ return mockObject.invokeMethod(method, this, arguments);
+ });
+
+ push.call(this.proxies, method);
+ }
+
+ var expectation = sinon.expectation.create(method);
+ push.call(this.expectations[method], expectation);
+
+ return expectation;
+ },
+
+ restore: function restore() {
+ var object = this.object;
+
+ each(this.proxies, function (proxy) {
+ if (typeof object[proxy].restore == "function") {
+ object[proxy].restore();
+ }
+ });
+ },
+
+ verify: function verify() {
+ var expectations = this.expectations || {};
+ var messages = [], met = [];
+
+ each(this.proxies, function (proxy) {
+ each(expectations[proxy], function (expectation) {
+ if (!expectation.met()) {
+ push.call(messages, expectation.toString());
+ } else {
+ push.call(met, expectation.toString());
+ }
+ });
+ });
+
+ this.restore();
+
+ if (messages.length > 0) {
+ sinon.expectation.fail(messages.concat(met).join("\n"));
+ } else {
+ sinon.expectation.pass(messages.concat(met).join("\n"));
+ }
+
+ return true;
+ },
+
+ invokeMethod: function invokeMethod(method, thisValue, args) {
+ var expectations = this.expectations && this.expectations[method];
+ var length = expectations && expectations.length || 0, i;
+
+ for (i = 0; i < length; i += 1) {
+ if (!expectations[i].met() &&
+ expectations[i].allowsCall(thisValue, args)) {
+ return expectations[i].apply(thisValue, args);
+ }
+ }
+
+ var messages = [], available, exhausted = 0;
+
+ for (i = 0; i < length; i += 1) {
+ if (expectations[i].allowsCall(thisValue, args)) {
+ available = available || expectations[i];
+ } else {
+ exhausted += 1;
+ }
+ push.call(messages, " " + expectations[i].toString());
+ }
+
+ if (exhausted === 0) {
+ return available.apply(thisValue, args);
+ }
+
+ messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({
+ proxy: method,
+ args: args
+ }));
+
+ sinon.expectation.fail(messages.join("\n"));
+ }
+ };
+ }()));
+
+ var times = sinon.timesInWords;
+
+ sinon.expectation = (function () {
+ var slice = Array.prototype.slice;
+ var _invoke = sinon.spy.invoke;
+
+ function callCountInWords(callCount) {
+ if (callCount == 0) {
+ return "never called";
+ } else {
+ return "called " + times(callCount);
+ }
+ }
+
+ function expectedCallCountInWords(expectation) {
+ var min = expectation.minCalls;
+ var max = expectation.maxCalls;
+
+ if (typeof min == "number" && typeof max == "number") {
+ var str = times(min);
+
+ if (min != max) {
+ str = "at least " + str + " and at most " + times(max);
+ }
+
+ return str;
+ }
+
+ if (typeof min == "number") {
+ return "at least " + times(min);
+ }
+
+ return "at most " + times(max);
+ }
+
+ function receivedMinCalls(expectation) {
+ var hasMinLimit = typeof expectation.minCalls == "number";
+ return !hasMinLimit || expectation.callCount >= expectation.minCalls;
+ }
+
+ function receivedMaxCalls(expectation) {
+ if (typeof expectation.maxCalls != "number") {
+ return false;
+ }
+
+ return expectation.callCount == expectation.maxCalls;
+ }
+
+ return {
+ minCalls: 1,
+ maxCalls: 1,
+
+ create: function create(methodName) {
+ var expectation = sinon.extend(sinon.stub.create(), sinon.expectation);
+ delete expectation.create;
+ expectation.method = methodName;
+
+ return expectation;
+ },
+
+ invoke: function invoke(func, thisValue, args) {
+ this.verifyCallAllowed(thisValue, args);
+
+ return _invoke.apply(this, arguments);
+ },
+
+ atLeast: function atLeast(num) {
+ if (typeof num != "number") {
+ throw new TypeError("'" + num + "' is not number");
+ }
+
+ if (!this.limitsSet) {
+ this.maxCalls = null;
+ this.limitsSet = true;
+ }
+
+ this.minCalls = num;
+
+ return this;
+ },
+
+ atMost: function atMost(num) {
+ if (typeof num != "number") {
+ throw new TypeError("'" + num + "' is not number");
+ }
+
+ if (!this.limitsSet) {
+ this.minCalls = null;
+ this.limitsSet = true;
+ }
+
+ this.maxCalls = num;
+
+ return this;
+ },
+
+ never: function never() {
+ return this.exactly(0);
+ },
+
+ once: function once() {
+ return this.exactly(1);
+ },
+
+ twice: function twice() {
+ return this.exactly(2);
+ },
+
+ thrice: function thrice() {
+ return this.exactly(3);
+ },
+
+ exactly: function exactly(num) {
+ if (typeof num != "number") {
+ throw new TypeError("'" + num + "' is not a number");
+ }
+
+ this.atLeast(num);
+ return this.atMost(num);
+ },
+
+ met: function met() {
+ return !this.failed && receivedMinCalls(this);
+ },
+
+ verifyCallAllowed: function verifyCallAllowed(thisValue, args) {
+ if (receivedMaxCalls(this)) {
+ this.failed = true;
+ sinon.expectation.fail(this.method + " already called " + times(this.maxCalls));
+ }
+
+ if ("expectedThis" in this && this.expectedThis !== thisValue) {
+ sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " +
+ this.expectedThis);
+ }
+
+ if (!("expectedArguments" in this)) {
+ return;
+ }
+
+ if (!args) {
+ sinon.expectation.fail(this.method + " received no arguments, expected " +
+ sinon.format(this.expectedArguments));
+ }
+
+ if (args.length < this.expectedArguments.length) {
+ sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) +
+ "), expected " + sinon.format(this.expectedArguments));
+ }
+
+ if (this.expectsExactArgCount &&
+ args.length != this.expectedArguments.length) {
+ sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) +
+ "), expected " + sinon.format(this.expectedArguments));
+ }
+
+ for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
+ if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
+ sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) +
+ ", expected " + sinon.format(this.expectedArguments));
+ }
+ }
+ },
+
+ allowsCall: function allowsCall(thisValue, args) {
+ if (this.met() && receivedMaxCalls(this)) {
+ return false;
+ }
+
+ if ("expectedThis" in this && this.expectedThis !== thisValue) {
+ return false;
+ }
+
+ if (!("expectedArguments" in this)) {
+ return true;
+ }
+
+ args = args || [];
+
+ if (args.length < this.expectedArguments.length) {
+ return false;
+ }
+
+ if (this.expectsExactArgCount &&
+ args.length != this.expectedArguments.length) {
+ return false;
+ }
+
+ for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
+ if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ },
+
+ withArgs: function withArgs() {
+ this.expectedArguments = slice.call(arguments);
+ return this;
+ },
+
+ withExactArgs: function withExactArgs() {
+ this.withArgs.apply(this, arguments);
+ this.expectsExactArgCount = true;
+ return this;
+ },
+
+ on: function on(thisValue) {
+ this.expectedThis = thisValue;
+ return this;
+ },
+
+ toString: function () {
+ var args = (this.expectedArguments || []).slice();
+
+ if (!this.expectsExactArgCount) {
+ push.call(args, "[...]");
+ }
+
+ var callStr = sinon.spyCall.toString.call({
+ proxy: this.method, args: args
+ });
+
+ var message = callStr.replace(", [...", "[, ...") + " " +
+ expectedCallCountInWords(this);
+
+ if (this.met()) {
+ return "Expectation met: " + message;
+ }
+
+ return "Expected " + message + " (" +
+ callCountInWords(this.callCount) + ")";
+ },
+
+ verify: function verify() {
+ if (!this.met()) {
+ sinon.expectation.fail(this.toString());
+ } else {
+ sinon.expectation.pass(this.toString());
+ }
+
+ return true;
+ },
+
+ pass: function(message) {
+ sinon.assert.pass(message);
+ },
+ fail: function (message) {
+ var exception = new Error(message);
+ exception.name = "ExpectationError";
+
+ throw exception;
+ }
+ };
+ }());
+
+ if (commonJSModule) {
+ module.exports = mock;
+ } else {
+ sinon.mock = mock;
+ }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend ../sinon.js
+ * @depend stub.js
+ * @depend mock.js
+ */
+/*jslint eqeqeq: false, onevar: false, forin: true*/
+/*global module, require, sinon*/
+/**
+ * Collections of stubs, spies and mocks.
+ *
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2010-2011 Christian Johansen
+ */
+
+(function (sinon) {
+ var commonJSModule = typeof module == "object" && typeof require == "function";
+ var push = [].push;
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+ if (!sinon && commonJSModule) {
+ sinon = require("../sinon");
+ }
+
+ if (!sinon) {
+ return;
+ }
+
+ function getFakes(fakeCollection) {
+ if (!fakeCollection.fakes) {
+ fakeCollection.fakes = [];
+ }
+
+ return fakeCollection.fakes;
+ }
+
+ function each(fakeCollection, method) {
+ var fakes = getFakes(fakeCollection);
+
+ for (var i = 0, l = fakes.length; i < l; i += 1) {
+ if (typeof fakes[i][method] == "function") {
+ fakes[i][method]();
+ }
+ }
+ }
+
+ function compact(fakeCollection) {
+ var fakes = getFakes(fakeCollection);
+ var i = 0;
+ while (i < fakes.length) {
+ fakes.splice(i, 1);
+ }
+ }
+
+ var collection = {
+ verify: function resolve() {
+ each(this, "verify");
+ },
+
+ restore: function restore() {
+ each(this, "restore");
+ compact(this);
+ },
+
+ verifyAndRestore: function verifyAndRestore() {
+ var exception;
+
+ try {
+ this.verify();
+ } catch (e) {
+ exception = e;
+ }
+
+ this.restore();
+
+ if (exception) {
+ throw exception;
+ }
+ },
+
+ add: function add(fake) {
+ push.call(getFakes(this), fake);
+ return fake;
+ },
+
+ spy: function spy() {
+ return this.add(sinon.spy.apply(sinon, arguments));
+ },
+
+ stub: function stub(object, property, value) {
+ if (property) {
+ var original = object[property];
+
+ if (typeof original != "function") {
+ if (!hasOwnProperty.call(object, property)) {
+ throw new TypeError("Cannot stub non-existent own property " + property);
+ }
+
+ object[property] = value;
+
+ return this.add({
+ restore: function () {
+ object[property] = original;
+ }
+ });
+ }
+ }
+ if (!property && !!object && typeof object == "object") {
+ var stubbedObj = sinon.stub.apply(sinon, arguments);
+
+ for (var prop in stubbedObj) {
+ if (typeof stubbedObj[prop] === "function") {
+ this.add(stubbedObj[prop]);
+ }
+ }
+
+ return stubbedObj;
+ }
+
+ return this.add(sinon.stub.apply(sinon, arguments));
+ },
+
+ mock: function mock() {
+ return this.add(sinon.mock.apply(sinon, arguments));
+ },
+
+ inject: function inject(obj) {
+ var col = this;
+
+ obj.spy = function () {
+ return col.spy.apply(col, arguments);
+ };
+
+ obj.stub = function () {
+ return col.stub.apply(col, arguments);
+ };
+
+ obj.mock = function () {
+ return col.mock.apply(col, arguments);
+ };
+
+ return obj;
+ }
+ };
+
+ if (commonJSModule) {
+ module.exports = collection;
+ } else {
+ sinon.collection = collection;
+ }
+}(typeof sinon == "object" && sinon || null));
+
+/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/
+/*global module, require, window*/
+/**
+ * Fake timer API
+ * setTimeout
+ * setInterval
+ * clearTimeout
+ * clearInterval
+ * tick
+ * reset
+ * Date
+ *
+ * Inspired by jsUnitMockTimeOut from JsUnit
+ *
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2010-2011 Christian Johansen
+ */
+
+if (typeof sinon == "undefined") {
+ var sinon = {};
+}
+
+(function (global) {
+ var id = 1;
+
+ function addTimer(args, recurring) {
+ if (args.length === 0) {
+ throw new Error("Function requires at least 1 parameter");
+ }
+
+ var toId = id++;
+ var delay = args[1] || 0;
+
+ if (!this.timeouts) {
+ this.timeouts = {};
+ }
+
+ this.timeouts[toId] = {
+ id: toId,
+ func: args[0],
+ callAt: this.now + delay,
+ invokeArgs: Array.prototype.slice.call(args, 2)
+ };
+
+ if (recurring === true) {
+ this.timeouts[toId].interval = delay;
+ }
+
+ return toId;
+ }
+
+ function parseTime(str) {
+ if (!str) {
+ return 0;
+ }
+
+ var strings = str.split(":");
+ var l = strings.length, i = l;
+ var ms = 0, parsed;
+
+ if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) {
+ throw new Error("tick only understands numbers and 'h:m:s'");
+ }
+
+ while (i--) {
+ parsed = parseInt(strings[i], 10);
+
+ if (parsed >= 60) {
+ throw new Error("Invalid time " + str);
+ }
+
+ ms += parsed * Math.pow(60, (l - i - 1));
+ }
+
+ return ms * 1000;
+ }
+
+ function createObject(object) {
+ var newObject;
+
+ if (Object.create) {
+ newObject = Object.create(object);
+ } else {
+ var F = function () {};
+ F.prototype = object;
+ newObject = new F();
+ }
+
+ newObject.Date.clock = newObject;
+ return newObject;
+ }
+
+ sinon.clock = {
+ now: 0,
+
+ create: function create(now) {
+ var clock = createObject(this);
+
+ if (typeof now == "number") {
+ clock.now = now;
+ }
+
+ if (!!now && typeof now == "object") {
+ throw new TypeError("now should be milliseconds since UNIX epoch");
+ }
+
+ return clock;
+ },
+
+ setTimeout: function setTimeout(callback, timeout) {
+ return addTimer.call(this, arguments, false);
+ },
+
+ clearTimeout: function clearTimeout(timerId) {
+ if (!this.timeouts) {
+ this.timeouts = [];
+ }
+
+ if (timerId in this.timeouts) {
+ delete this.timeouts[timerId];
+ }
+ },
+
+ setInterval: function setInterval(callback, timeout) {
+ return addTimer.call(this, arguments, true);
+ },
+
+ clearInterval: function clearInterval(timerId) {
+ this.clearTimeout(timerId);
+ },
+
+ tick: function tick(ms) {
+ ms = typeof ms == "number" ? ms : parseTime(ms);
+ var tickFrom = this.now, tickTo = this.now + ms, previous = this.now;
+ var timer = this.firstTimerInRange(tickFrom, tickTo);
+
+ var firstException;
+ while (timer && tickFrom <= tickTo) {
+ if (this.timeouts[timer.id]) {
+ tickFrom = this.now = timer.callAt;
+ try {
+ this.callTimer(timer);
+ } catch (e) {
+ firstException = firstException || e;
+ }
+ }
+
+ timer = this.firstTimerInRange(previous, tickTo);
+ previous = tickFrom;
+ }
+
+ this.now = tickTo;
+
+ if (firstException) {
+ throw firstException;
+ }
+ },
+
+ firstTimerInRange: function (from, to) {
+ var timer, smallest, originalTimer;
+
+ for (var id in this.timeouts) {
+ if (this.timeouts.hasOwnProperty(id)) {
+ if (this.timeouts[id].callAt < from || this.timeouts[id].callAt > to) {
+ continue;
+ }
+
+ if (!smallest || this.timeouts[id].callAt < smallest) {
+ originalTimer = this.timeouts[id];
+ smallest = this.timeouts[id].callAt;
+
+ timer = {
+ func: this.timeouts[id].func,
+ callAt: this.timeouts[id].callAt,
+ interval: this.timeouts[id].interval,
+ id: this.timeouts[id].id,
+ invokeArgs: this.timeouts[id].invokeArgs
+ };
+ }
+ }
+ }
+
+ return timer || null;
+ },
+
+ callTimer: function (timer) {
+ if (typeof timer.interval == "number") {
+ this.timeouts[timer.id].callAt += timer.interval;
+ } else {
+ delete this.timeouts[timer.id];
+ }
+
+ try {
+ if (typeof timer.func == "function") {
+ timer.func.apply(null, timer.invokeArgs);
+ } else {
+ eval(timer.func);
+ }
+ } catch (e) {
+ var exception = e;
+ }
+
+ if (!this.timeouts[timer.id]) {
+ if (exception) {
+ throw exception;
+ }
+ return;
+ }
+
+ if (exception) {
+ throw exception;
+ }
+ },
+
+ reset: function reset() {
+ this.timeouts = {};
+ },
+
+ Date: (function () {
+ var NativeDate = Date;
+
+ function ClockDate(year, month, date, hour, minute, second, ms) {
+ // Defensive and verbose to avoid potential harm in passing
+ // explicit undefined when user does not pass argument
+ switch (arguments.length) {
+ case 0:
+ return new NativeDate(ClockDate.clock.now);
+ case 1:
+ return new NativeDate(year);
+ case 2:
+ return new NativeDate(year, month);
+ case 3:
+ return new NativeDate(year, month, date);
+ case 4:
+ return new NativeDate(year, month, date, hour);
+ case 5:
+ return new NativeDate(year, month, date, hour, minute);
+ case 6:
+ return new NativeDate(year, month, date, hour, minute, second);
+ default:
+ return new NativeDate(year, month, date, hour, minute, second, ms);
+ }
+ }
+
+ return mirrorDateProperties(ClockDate, NativeDate);
+ }())
+ };
+
+ function mirrorDateProperties(target, source) {
+ if (source.now) {
+ target.now = function now() {
+ return target.clock.now;
+ };
+ } else {
+ delete target.now;
+ }
+
+ if (source.toSource) {
+ target.toSource = function toSource() {
+ return source.toSource();
+ };
+ } else {
+ delete target.toSource;
+ }
+
+ target.toString = function toString() {
+ return source.toString();
+ };
+
+ target.prototype = source.prototype;
+ target.parse = source.parse;
+ target.UTC = source.UTC;
+ target.prototype.toUTCString = source.prototype.toUTCString;
+ return target;
+ }
+
+ var methods = ["Date", "setTimeout", "setInterval",
+ "clearTimeout", "clearInterval"];
+
+ function restore() {
+ var method;
+
+ for (var i = 0, l = this.methods.length; i < l; i++) {
+ method = this.methods[i];
+ if (global[method].hadOwnProperty) {
+ global[method] = this["_" + method];
+ } else {
+ delete global[method];
+ }
+ }
+
+ // Prevent multiple executions which will completely remove these props
+ this.methods = [];
+ }
+
+ function stubGlobal(method, clock) {
+ clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(global, method);
+ clock["_" + method] = global[method];
+
+ if (method == "Date") {
+ var date = mirrorDateProperties(clock[method], global[method]);
+ global[method] = date;
+ } else {
+ global[method] = function () {
+ return clock[method].apply(clock, arguments);
+ };
+
+ for (var prop in clock[method]) {
+ if (clock[method].hasOwnProperty(prop)) {
+ global[method][prop] = clock[method][prop];
+ }
+ }
+ }
+
+ global[method].clock = clock;
+ }
+
+ sinon.useFakeTimers = function useFakeTimers(now) {
+ var clock = sinon.clock.create(now);
+ clock.restore = restore;
+ clock.methods = Array.prototype.slice.call(arguments,
+ typeof now == "number" ? 1 : 0);
+
+ if (clock.methods.length === 0) {
+ clock.methods = methods;
+ }
+
+ for (var i = 0, l = clock.methods.length; i < l; i++) {
+ stubGlobal(clock.methods[i], clock);
+ }
+
+ return clock;
+ };
+}(typeof global != "undefined" && typeof global !== "function" ? global : this));
+
+sinon.timers = {
+ setTimeout: setTimeout,
+ clearTimeout: clearTimeout,
+ setInterval: setInterval,
+ clearInterval: clearInterval,
+ Date: Date
+};
+
+if (typeof module == "object" && typeof require == "function") {
+ module.exports = sinon;
+}
+
+/*jslint eqeqeq: false, onevar: false*/
+/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/
+/**
+ * Minimal Event interface implementation
+ *
+ * Original implementation by Sven Fuchs: https://gist.github.com/995028
+ * Modifications and tests by Christian Johansen.
+ *
+ * @author Sven Fuchs ([email protected])
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2011 Sven Fuchs, Christian Johansen
+ */
+
+if (typeof sinon == "undefined") {
+ this.sinon = {};
+}
+
+(function () {
+ var push = [].push;
+
+ sinon.Event = function Event(type, bubbles, cancelable) {
+ this.initEvent(type, bubbles, cancelable);
+ };
+
+ sinon.Event.prototype = {
+ initEvent: function(type, bubbles, cancelable) {
+ this.type = type;
+ this.bubbles = bubbles;
+ this.cancelable = cancelable;
+ },
+
+ stopPropagation: function () {},
+
+ preventDefault: function () {
+ this.defaultPrevented = true;
+ }
+ };
+
+ sinon.EventTarget = {
+ addEventListener: function addEventListener(event, listener, useCapture) {
+ this.eventListeners = this.eventListeners || {};
+ this.eventListeners[event] = this.eventListeners[event] || [];
+ push.call(this.eventListeners[event], listener);
+ },
+
+ removeEventListener: function removeEventListener(event, listener, useCapture) {
+ var listeners = this.eventListeners && this.eventListeners[event] || [];
+
+ for (var i = 0, l = listeners.length; i < l; ++i) {
+ if (listeners[i] == listener) {
+ return listeners.splice(i, 1);
+ }
+ }
+ },
+
+ dispatchEvent: function dispatchEvent(event) {
+ var type = event.type;
+ var listeners = this.eventListeners && this.eventListeners[type] || [];
+
+ for (var i = 0; i < listeners.length; i++) {
+ if (typeof listeners[i] == "function") {
+ listeners[i].call(this, event);
+ } else {
+ listeners[i].handleEvent(event);
+ }
+ }
+
+ return !!event.defaultPrevented;
+ }
+ };
+}());
+
+/**
+ * @depend ../../sinon.js
+ * @depend event.js
+ */
+/*jslint eqeqeq: false, onevar: false*/
+/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/
+/**
+ * Fake XMLHttpRequest object
+ *
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2010-2011 Christian Johansen
+ */
+
+if (typeof sinon == "undefined") {
+ this.sinon = {};
+}
+sinon.xhr = { XMLHttpRequest: this.XMLHttpRequest };
+
+// wrapper for global
+(function(global) {
+ var xhr = sinon.xhr;
+ xhr.GlobalXMLHttpRequest = global.XMLHttpRequest;
+ xhr.GlobalActiveXObject = global.ActiveXObject;
+ xhr.supportsActiveX = typeof xhr.GlobalActiveXObject != "undefined";
+ xhr.supportsXHR = typeof xhr.GlobalXMLHttpRequest != "undefined";
+ xhr.workingXHR = xhr.supportsXHR ? xhr.GlobalXMLHttpRequest : xhr.supportsActiveX
+ ? function() { return new xhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") } : false;
+
+ /*jsl:ignore*/
+ var unsafeHeaders = {
+ "Accept-Charset": true,
+ "Accept-Encoding": true,
+ "Connection": true,
+ "Content-Length": true,
+ "Cookie": true,
+ "Cookie2": true,
+ "Content-Transfer-Encoding": true,
+ "Date": true,
+ "Expect": true,
+ "Host": true,
+ "Keep-Alive": true,
+ "Referer": true,
+ "TE": true,
+ "Trailer": true,
+ "Transfer-Encoding": true,
+ "Upgrade": true,
+ "User-Agent": true,
+ "Via": true
+ };
+ /*jsl:end*/
+
+ function FakeXMLHttpRequest() {
+ this.readyState = FakeXMLHttpRequest.UNSENT;
+ this.requestHeaders = {};
+ this.requestBody = null;
+ this.status = 0;
+ this.statusText = "";
+
+ if (typeof FakeXMLHttpRequest.onCreate == "function") {
+ FakeXMLHttpRequest.onCreate(this);
+ }
+ }
+
+ function verifyState(xhr) {
+ if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
+ throw new Error("INVALID_STATE_ERR");
+ }
+
+ if (xhr.sendFlag) {
+ throw new Error("INVALID_STATE_ERR");
+ }
+ }
+
+ // filtering to enable a white-list version of Sinon FakeXhr,
+ // where whitelisted requests are passed through to real XHR
+ function each(collection, callback) {
+ if (!collection) return;
+ for (var i = 0, l = collection.length; i < l; i += 1) {
+ callback(collection[i]);
+ }
+ }
+ function some(collection, callback) {
+ for (var index = 0; index < collection.length; index++) {
+ if(callback(collection[index]) === true) return true;
+ };
+ return false;
+ }
+ // largest arity in XHR is 5 - XHR#open
+ var apply = function(obj,method,args) {
+ switch(args.length) {
+ case 0: return obj[method]();
+ case 1: return obj[method](args[0]);
+ case 2: return obj[method](args[0],args[1]);
+ case 3: return obj[method](args[0],args[1],args[2]);
+ case 4: return obj[method](args[0],args[1],args[2],args[3]);
+ case 5: return obj[method](args[0],args[1],args[2],args[3],args[4]);
+ };
+ };
+
+ FakeXMLHttpRequest.filters = [];
+ FakeXMLHttpRequest.addFilter = function(fn) {
+ this.filters.push(fn)
+ };
+ var IE6Re = /MSIE 6/;
+ FakeXMLHttpRequest.defake = function(fakeXhr,xhrArgs) {
+ var xhr = new sinon.xhr.workingXHR();
+ each(["open","setRequestHeader","send","abort","getResponseHeader",
+ "getAllResponseHeaders","addEventListener","overrideMimeType","removeEventListener"],
+ function(method) {
+ fakeXhr[method] = function() {
+ return apply(xhr,method,arguments);
+ };
+ });
+
+ var copyAttrs = function(args) {
+ each(args, function(attr) {
+ try {
+ fakeXhr[attr] = xhr[attr]
+ } catch(e) {
+ if(!IE6Re.test(navigator.userAgent)) throw e;
+ }
+ });
+ };
+
+ var stateChange = function() {
+ fakeXhr.readyState = xhr.readyState;
+ if(xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) {
+ copyAttrs(["status","statusText"]);
+ }
+ if(xhr.readyState >= FakeXMLHttpRequest.LOADING) {
+ copyAttrs(["responseText"]);
+ }
+ if(xhr.readyState === FakeXMLHttpRequest.DONE) {
+ copyAttrs(["responseXML"]);
+ }
+ if(fakeXhr.onreadystatechange) fakeXhr.onreadystatechange.call(fakeXhr);
+ };
+ if(xhr.addEventListener) {
+ for(var event in fakeXhr.eventListeners) {
+ if(fakeXhr.eventListeners.hasOwnProperty(event)) {
+ each(fakeXhr.eventListeners[event],function(handler) {
+ xhr.addEventListener(event, handler);
+ });
+ }
+ }
+ xhr.addEventListener("readystatechange",stateChange);
+ } else {
+ xhr.onreadystatechange = stateChange;
+ }
+ apply(xhr,"open",xhrArgs);
+ };
+ FakeXMLHttpRequest.useFilters = false;
+
+ function verifyRequestSent(xhr) {
+ if (xhr.readyState == FakeXMLHttpRequest.DONE) {
+ throw new Error("Request done");
+ }
+ }
+
+ function verifyHeadersReceived(xhr) {
+ if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) {
+ throw new Error("No headers received");
+ }
+ }
+
+ function verifyResponseBodyType(body) {
+ if (typeof body != "string") {
+ var error = new Error("Attempted to respond to fake XMLHttpRequest with " +
+ body + ", which is not a string.");
+ error.name = "InvalidBodyException";
+ throw error;
+ }
+ }
+
+ sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, {
+ async: true,
+
+ open: function open(method, url, async, username, password) {
+ this.method = method;
+ this.url = url;
+ this.async = typeof async == "boolean" ? async : true;
+ this.username = username;
+ this.password = password;
+ this.responseText = null;
+ this.responseXML = null;
+ this.requestHeaders = {};
+ this.sendFlag = false;
+ if(sinon.FakeXMLHttpRequest.useFilters === true) {
+ var xhrArgs = arguments;
+ var defake = some(FakeXMLHttpRequest.filters,function(filter) {
+ return filter.apply(this,xhrArgs)
+ });
+ if (defake) {
+ return sinon.FakeXMLHttpRequest.defake(this,arguments);
+ }
+ }
+ this.readyStateChange(FakeXMLHttpRequest.OPENED);
+ },
+
+ readyStateChange: function readyStateChange(state) {
+ this.readyState = state;
+
+ if (typeof this.onreadystatechange == "function") {
+ try {
+ this.onreadystatechange();
+ } catch (e) {
+ sinon.logError("Fake XHR onreadystatechange handler", e);
+ }
+ }
+
+ this.dispatchEvent(new sinon.Event("readystatechange"));
+ },
+
+ setRequestHeader: function setRequestHeader(header, value) {
+ verifyState(this);
+
+ if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) {
+ throw new Error("Refused to set unsafe header \"" + header + "\"");
+ }
+
+ if (this.requestHeaders[header]) {
+ this.requestHeaders[header] += "," + value;
+ } else {
+ this.requestHeaders[header] = value;
+ }
+ },
+
+ // Helps testing
+ setResponseHeaders: function setResponseHeaders(headers) {
+ this.responseHeaders = {};
+
+ for (var header in headers) {
+ if (headers.hasOwnProperty(header)) {
+ this.responseHeaders[header] = headers[header];
+ }
+ }
+
+ if (this.async) {
+ this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED);
+ }
+ },
+
+ // Currently treats ALL data as a DOMString (i.e. no Document)
+ send: function send(data) {
+ verifyState(this);
+
+ if (!/^(get|head)$/i.test(this.method)) {
+ if (this.requestHeaders["Content-Type"]) {
+ var value = this.requestHeaders["Content-Type"].split(";");
+ this.requestHeaders["Content-Type"] = value[0] + ";charset=utf-8";
+ } else {
+ this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
+ }
+
+ this.requestBody = data;
+ }
+
+ this.errorFlag = false;
+ this.sendFlag = this.async;
+ this.readyStateChange(FakeXMLHttpRequest.OPENED);
+
+ if (typeof this.onSend == "function") {
+ this.onSend(this);
+ }
+ },
+
+ abort: function abort() {
+ this.aborted = true;
+ this.responseText = null;
+ this.errorFlag = true;
+ this.requestHeaders = {};
+
+ if (this.readyState > sinon.FakeXMLHttpRequest.UNSENT && this.sendFlag) {
+ this.readyStateChange(sinon.FakeXMLHttpRequest.DONE);
+ this.sendFlag = false;
+ }
+
+ this.readyState = sinon.FakeXMLHttpRequest.UNSENT;
+ },
+
+ getResponseHeader: function getResponseHeader(header) {
+ if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
+ return null;
+ }
+
+ if (/^Set-Cookie2?$/i.test(header)) {
+ return null;
+ }
+
+ header = header.toLowerCase();
+
+ for (var h in this.responseHeaders) {
+ if (h.toLowerCase() == header) {
+ return this.responseHeaders[h];
+ }
+ }
+
+ return null;
+ },
+
+ getAllResponseHeaders: function getAllResponseHeaders() {
+ if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
+ return "";
+ }
+
+ var headers = "";
+
+ for (var header in this.responseHeaders) {
+ if (this.responseHeaders.hasOwnProperty(header) &&
+ !/^Set-Cookie2?$/i.test(header)) {
+ headers += header + ": " + this.responseHeaders[header] + "\r\n";
+ }
+ }
+
+ return headers;
+ },
+
+ setResponseBody: function setResponseBody(body) {
+ verifyRequestSent(this);
+ verifyHeadersReceived(this);
+ verifyResponseBodyType(body);
+
+ var chunkSize = this.chunkSize || 10;
+ var index = 0;
+ this.responseText = "";
+
+ do {
+ if (this.async) {
+ this.readyStateChange(FakeXMLHttpRequest.LOADING);
+ }
+
+ this.responseText += body.substring(index, index + chunkSize);
+ index += chunkSize;
+ } while (index < body.length);
+
+ var type = this.getResponseHeader("Content-Type");
+
+ if (this.responseText &&
+ (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) {
+ try {
+ this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText);
+ } catch (e) {
+ // Unable to parse XML - no biggie
+ }
+ }
+
+ if (this.async) {
+ this.readyStateChange(FakeXMLHttpRequest.DONE);
+ } else {
+ this.readyState = FakeXMLHttpRequest.DONE;
+ }
+ },
+
+ respond: function respond(status, headers, body) {
+ this.setResponseHeaders(headers || {});
+ this.status = typeof status == "number" ? status : 200;
+ this.statusText = FakeXMLHttpRequest.statusCodes[this.status];
+ this.setResponseBody(body || "");
+ }
+ });
+
+ sinon.extend(FakeXMLHttpRequest, {
+ UNSENT: 0,
+ OPENED: 1,
+ HEADERS_RECEIVED: 2,
+ LOADING: 3,
+ DONE: 4
+ });
+
+ // Borrowed from JSpec
+ FakeXMLHttpRequest.parseXML = function parseXML(text) {
+ var xmlDoc;
+
+ if (typeof DOMParser != "undefined") {
+ var parser = new DOMParser();
+ xmlDoc = parser.parseFromString(text, "text/xml");
+ } else {
+ xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
+ xmlDoc.async = "false";
+ xmlDoc.loadXML(text);
+ }
+
+ return xmlDoc;
+ };
+
+ FakeXMLHttpRequest.statusCodes = {
+ 100: "Continue",
+ 101: "Switching Protocols",
+ 200: "OK",
+ 201: "Created",
+ 202: "Accepted",
+ 203: "Non-Authoritative Information",
+ 204: "No Content",
+ 205: "Reset Content",
+ 206: "Partial Content",
+ 300: "Multiple Choice",
+ 301: "Moved Permanently",
+ 302: "Found",
+ 303: "See Other",
+ 304: "Not Modified",
+ 305: "Use Proxy",
+ 307: "Temporary Redirect",
+ 400: "Bad Request",
+ 401: "Unauthorized",
+ 402: "Payment Required",
+ 403: "Forbidden",
+ 404: "Not Found",
+ 405: "Method Not Allowed",
+ 406: "Not Acceptable",
+ 407: "Proxy Authentication Required",
+ 408: "Request Timeout",
+ 409: "Conflict",
+ 410: "Gone",
+ 411: "Length Required",
+ 412: "Precondition Failed",
+ 413: "Request Entity Too Large",
+ 414: "Request-URI Too Long",
+ 415: "Unsupported Media Type",
+ 416: "Requested Range Not Satisfiable",
+ 417: "Expectation Failed",
+ 422: "Unprocessable Entity",
+ 500: "Internal Server Error",
+ 501: "Not Implemented",
+ 502: "Bad Gateway",
+ 503: "Service Unavailable",
+ 504: "Gateway Timeout",
+ 505: "HTTP Version Not Supported"
+ };
+
+ sinon.useFakeXMLHttpRequest = function () {
+ sinon.FakeXMLHttpRequest.restore = function restore(keepOnCreate) {
+ if (xhr.supportsXHR) {
+ global.XMLHttpRequest = xhr.GlobalXMLHttpRequest;
+ }
+
+ if (xhr.supportsActiveX) {
+ global.ActiveXObject = xhr.GlobalActiveXObject;
+ }
+
+ delete sinon.FakeXMLHttpRequest.restore;
+
+ if (keepOnCreate !== true) {
+ delete sinon.FakeXMLHttpRequest.onCreate;
+ }
+ };
+ if (xhr.supportsXHR) {
+ global.XMLHttpRequest = sinon.FakeXMLHttpRequest;
+ }
+
+ if (xhr.supportsActiveX) {
+ global.ActiveXObject = function ActiveXObject(objId) {
+ if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) {
+
+ return new sinon.FakeXMLHttpRequest();
+ }
+
+ return new xhr.GlobalActiveXObject(objId);
+ };
+ }
+
+ return sinon.FakeXMLHttpRequest;
+ };
+
+ sinon.FakeXMLHttpRequest = FakeXMLHttpRequest;
+})(this);
+
+if (typeof module == "object" && typeof require == "function") {
+ module.exports = sinon;
+}
+
+/**
+ * @depend fake_xml_http_request.js
+ */
+/*jslint eqeqeq: false, onevar: false, regexp: false, plusplus: false*/
+/*global module, require, window*/
+/**
+ * The Sinon "server" mimics a web server that receives requests from
+ * sinon.FakeXMLHttpRequest and provides an API to respond to those requests,
+ * both synchronously and asynchronously. To respond synchronuously, canned
+ * answers have to be provided upfront.
+ *
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2010-2011 Christian Johansen
+ */
+
+if (typeof sinon == "undefined") {
+ var sinon = {};
+}
+
+sinon.fakeServer = (function () {
+ var push = [].push;
+ function F() {}
+
+ function create(proto) {
+ F.prototype = proto;
+ return new F();
+ }
+
+ function responseArray(handler) {
+ var response = handler;
+
+ if (Object.prototype.toString.call(handler) != "[object Array]") {
+ response = [200, {}, handler];
+ }
+
+ if (typeof response[2] != "string") {
+ throw new TypeError("Fake server response body should be string, but was " +
+ typeof response[2]);
+ }
+
+ return response;
+ }
+
+ var wloc = typeof window !== "undefined" ? window.location : {};
+ var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host);
+
+ function matchOne(response, reqMethod, reqUrl) {
+ var rmeth = response.method;
+ var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase();
+ var url = response.url;
+ var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl));
+
+ return matchMethod && matchUrl;
+ }
+
+ function match(response, request) {
+ var requestMethod = this.getHTTPMethod(request);
+ var requestUrl = request.url;
+
+ if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) {
+ requestUrl = requestUrl.replace(rCurrLoc, "");
+ }
+
+ if (matchOne(response, this.getHTTPMethod(request), requestUrl)) {
+ if (typeof response.response == "function") {
+ var ru = response.url;
+ var args = [request].concat(!ru ? [] : requestUrl.match(ru).slice(1));
+ return response.response.apply(response, args);
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ return {
+ create: function () {
+ var server = create(this);
+ this.xhr = sinon.useFakeXMLHttpRequest();
+ server.requests = [];
+
+ this.xhr.onCreate = function (xhrObj) {
+ server.addRequest(xhrObj);
+ };
+
+ return server;
+ },
+
+ addRequest: function addRequest(xhrObj) {
+ var server = this;
+ push.call(this.requests, xhrObj);
+
+ xhrObj.onSend = function () {
+ server.handleRequest(this);
+ };
+
+ if (this.autoRespond && !this.responding) {
+ setTimeout(function () {
+ server.responding = false;
+ server.respond();
+ }, this.autoRespondAfter || 10);
+
+ this.responding = true;
+ }
+ },
+
+ getHTTPMethod: function getHTTPMethod(request) {
+ if (this.fakeHTTPMethods && /post/i.test(request.method)) {
+ var matches = (request.requestBody || "").match(/_method=([^\b;]+)/);
+ return !!matches ? matches[1] : request.method;
+ }
+
+ return request.method;
+ },
+
+ handleRequest: function handleRequest(xhr) {
+ if (xhr.async) {
+ if (!this.queue) {
+ this.queue = [];
+ }
+
+ push.call(this.queue, xhr);
+ } else {
+ this.processRequest(xhr);
+ }
+ },
+
+ respondWith: function respondWith(method, url, body) {
+ if (arguments.length == 1 && typeof method != "function") {
+ this.response = responseArray(method);
+ return;
+ }
+
+ if (!this.responses) { this.responses = []; }
+
+ if (arguments.length == 1) {
+ body = method;
+ url = method = null;
+ }
+
+ if (arguments.length == 2) {
+ body = url;
+ url = method;
+ method = null;
+ }
+
+ push.call(this.responses, {
+ method: method,
+ url: url,
+ response: typeof body == "function" ? body : responseArray(body)
+ });
+ },
+
+ respond: function respond() {
+ if (arguments.length > 0) this.respondWith.apply(this, arguments);
+ var queue = this.queue || [];
+ var request;
+
+ while(request = queue.shift()) {
+ this.processRequest(request);
+ }
+ },
+
+ processRequest: function processRequest(request) {
+ try {
+ if (request.aborted) {
+ return;
+ }
+
+ var response = this.response || [404, {}, ""];
+
+ if (this.responses) {
+ for (var i = 0, l = this.responses.length; i < l; i++) {
+ if (match.call(this, this.responses[i], request)) {
+ response = this.responses[i].response;
+ break;
+ }
+ }
+ }
+
+ if (request.readyState != 4) {
+ request.respond(response[0], response[1], response[2]);
+ }
+ } catch (e) {
+ sinon.logError("Fake server request processing", e);
+ }
+ },
+
+ restore: function restore() {
+ return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments);
+ }
+ };
+}());
+
+if (typeof module == "object" && typeof require == "function") {
+ module.exports = sinon;
+}
+
+/**
+ * @depend fake_server.js
+ * @depend fake_timers.js
+ */
+/*jslint browser: true, eqeqeq: false, onevar: false*/
+/*global sinon*/
+/**
+ * Add-on for sinon.fakeServer that automatically handles a fake timer along with
+ * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery
+ * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead,
+ * it polls the object for completion with setInterval. Dispite the direct
+ * motivation, there is nothing jQuery-specific in this file, so it can be used
+ * in any environment where the ajax implementation depends on setInterval or
+ * setTimeout.
+ *
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2010-2011 Christian Johansen
+ */
+
+(function () {
+ function Server() {}
+ Server.prototype = sinon.fakeServer;
+
+ sinon.fakeServerWithClock = new Server();
+
+ sinon.fakeServerWithClock.addRequest = function addRequest(xhr) {
+ if (xhr.async) {
+ if (typeof setTimeout.clock == "object") {
+ this.clock = setTimeout.clock;
+ } else {
+ this.clock = sinon.useFakeTimers();
+ this.resetClock = true;
+ }
+
+ if (!this.longestTimeout) {
+ var clockSetTimeout = this.clock.setTimeout;
+ var clockSetInterval = this.clock.setInterval;
+ var server = this;
+
+ this.clock.setTimeout = function (fn, timeout) {
+ server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
+
+ return clockSetTimeout.apply(this, arguments);
+ };
+
+ this.clock.setInterval = function (fn, timeout) {
+ server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
+
+ return clockSetInterval.apply(this, arguments);
+ };
+ }
+ }
+
+ return sinon.fakeServer.addRequest.call(this, xhr);
+ };
+
+ sinon.fakeServerWithClock.respond = function respond() {
+ var returnVal = sinon.fakeServer.respond.apply(this, arguments);
+
+ if (this.clock) {
+ this.clock.tick(this.longestTimeout || 0);
+ this.longestTimeout = 0;
+
+ if (this.resetClock) {
+ this.clock.restore();
+ this.resetClock = false;
+ }
+ }
+
+ return returnVal;
+ };
+
+ sinon.fakeServerWithClock.restore = function restore() {
+ if (this.clock) {
+ this.clock.restore();
+ }
+
+ return sinon.fakeServer.restore.apply(this, arguments);
+ };
+}());
+
+/**
+ * @depend ../sinon.js
+ * @depend collection.js
+ * @depend util/fake_timers.js
+ * @depend util/fake_server_with_clock.js
+ */
+/*jslint eqeqeq: false, onevar: false, plusplus: false*/
+/*global require, module*/
+/**
+ * Manages fake collections as well as fake utilities such as Sinon's
+ * timers and fake XHR implementation in one convenient object.
+ *
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2010-2011 Christian Johansen
+ */
+
+if (typeof module == "object" && typeof require == "function") {
+ var sinon = require("../sinon");
+ sinon.extend(sinon, require("./util/fake_timers"));
+}
+
+(function () {
+ var push = [].push;
+
+ function exposeValue(sandbox, config, key, value) {
+ if (!value) {
+ return;
+ }
+
+ if (config.injectInto) {
+ config.injectInto[key] = value;
+ } else {
+ push.call(sandbox.args, value);
+ }
+ }
+
+ function prepareSandboxFromConfig(config) {
+ var sandbox = sinon.create(sinon.sandbox);
+
+ if (config.useFakeServer) {
+ if (typeof config.useFakeServer == "object") {
+ sandbox.serverPrototype = config.useFakeServer;
+ }
+
+ sandbox.useFakeServer();
+ }
+
+ if (config.useFakeTimers) {
+ if (typeof config.useFakeTimers == "object") {
+ sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers);
+ } else {
+ sandbox.useFakeTimers();
+ }
+ }
+
+ return sandbox;
+ }
+
+ sinon.sandbox = sinon.extend(sinon.create(sinon.collection), {
+ useFakeTimers: function useFakeTimers() {
+ this.clock = sinon.useFakeTimers.apply(sinon, arguments);
+
+ return this.add(this.clock);
+ },
+
+ serverPrototype: sinon.fakeServer,
+
+ useFakeServer: function useFakeServer() {
+ var proto = this.serverPrototype || sinon.fakeServer;
+
+ if (!proto || !proto.create) {
+ return null;
+ }
+
+ this.server = proto.create();
+ return this.add(this.server);
+ },
+
+ inject: function (obj) {
+ sinon.collection.inject.call(this, obj);
+
+ if (this.clock) {
+ obj.clock = this.clock;
+ }
+
+ if (this.server) {
+ obj.server = this.server;
+ obj.requests = this.server.requests;
+ }
+
+ return obj;
+ },
+
+ create: function (config) {
+ if (!config) {
+ return sinon.create(sinon.sandbox);
+ }
+
+ var sandbox = prepareSandboxFromConfig(config);
+ sandbox.args = sandbox.args || [];
+ var prop, value, exposed = sandbox.inject({});
+
+ if (config.properties) {
+ for (var i = 0, l = config.properties.length; i < l; i++) {
+ prop = config.properties[i];
+ value = exposed[prop] || prop == "sandbox" && sandbox;
+ exposeValue(sandbox, config, prop, value);
+ }
+ } else {
+ exposeValue(sandbox, config, "sandbox", value);
+ }
+
+ return sandbox;
+ }
+ });
+
+ sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer;
+
+ if (typeof module == "object" && typeof require == "function") {
+ module.exports = sinon.sandbox;
+ }
+}());
+
+/**
+ * @depend ../sinon.js
+ * @depend stub.js
+ * @depend mock.js
+ * @depend sandbox.js
+ */
+/*jslint eqeqeq: false, onevar: false, forin: true, plusplus: false*/
+/*global module, require, sinon*/
+/**
+ * Test function, sandboxes fakes
+ *
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2010-2011 Christian Johansen
+ */
+
+(function (sinon) {
+ var commonJSModule = typeof module == "object" && typeof require == "function";
+
+ if (!sinon && commonJSModule) {
+ sinon = require("../sinon");
+ }
+
+ if (!sinon) {
+ return;
+ }
+
+ function test(callback) {
+ var type = typeof callback;
+
+ if (type != "function") {
+ throw new TypeError("sinon.test needs to wrap a test function, got " + type);
+ }
+
+ return function () {
+ var config = sinon.getConfig(sinon.config);
+ config.injectInto = config.injectIntoThis && this || config.injectInto;
+ var sandbox = sinon.sandbox.create(config);
+ var exception, result;
+ var args = Array.prototype.slice.call(arguments).concat(sandbox.args);
+
+ try {
+ result = callback.apply(this, args);
+ } catch (e) {
+ exception = e;
+ }
+
+ if (typeof exception !== "undefined") {
+ sandbox.restore();
+ throw exception;
+ }
+ else {
+ sandbox.verifyAndRestore();
+ }
+
+ return result;
+ };
+ }
+
+ test.config = {
+ injectIntoThis: true,
+ injectInto: null,
+ properties: ["spy", "stub", "mock", "clock", "server", "requests"],
+ useFakeTimers: true,
+ useFakeServer: true
+ };
+
+ if (commonJSModule) {
+ module.exports = test;
+ } else {
+ sinon.test = test;
+ }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend ../sinon.js
+ * @depend test.js
+ */
+/*jslint eqeqeq: false, onevar: false, eqeqeq: false*/
+/*global module, require, sinon*/
+/**
+ * Test case, sandboxes all test functions
+ *
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2010-2011 Christian Johansen
+ */
+
+(function (sinon) {
+ var commonJSModule = typeof module == "object" && typeof require == "function";
+
+ if (!sinon && commonJSModule) {
+ sinon = require("../sinon");
+ }
+
+ if (!sinon || !Object.prototype.hasOwnProperty) {
+ return;
+ }
+
+ function createTest(property, setUp, tearDown) {
+ return function () {
+ if (setUp) {
+ setUp.apply(this, arguments);
+ }
+
+ var exception, result;
+
+ try {
+ result = property.apply(this, arguments);
+ } catch (e) {
+ exception = e;
+ }
+
+ if (tearDown) {
+ tearDown.apply(this, arguments);
+ }
+
+ if (exception) {
+ throw exception;
+ }
+
+ return result;
+ };
+ }
+
+ function testCase(tests, prefix) {
+ /*jsl:ignore*/
+ if (!tests || typeof tests != "object") {
+ throw new TypeError("sinon.testCase needs an object with test functions");
+ }
+ /*jsl:end*/
+
+ prefix = prefix || "test";
+ var rPrefix = new RegExp("^" + prefix);
+ var methods = {}, testName, property, method;
+ var setUp = tests.setUp;
+ var tearDown = tests.tearDown;
+
+ for (testName in tests) {
+ if (tests.hasOwnProperty(testName)) {
+ property = tests[testName];
+
+ if (/^(setUp|tearDown)$/.test(testName)) {
+ continue;
+ }
+
+ if (typeof property == "function" && rPrefix.test(testName)) {
+ method = property;
+
+ if (setUp || tearDown) {
+ method = createTest(property, setUp, tearDown);
+ }
+
+ methods[testName] = sinon.test(method);
+ } else {
+ methods[testName] = tests[testName];
+ }
+ }
+ }
+
+ return methods;
+ }
+
+ if (commonJSModule) {
+ module.exports = testCase;
+ } else {
+ sinon.testCase = testCase;
+ }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend ../sinon.js
+ * @depend stub.js
+ */
+/*jslint eqeqeq: false, onevar: false, nomen: false, plusplus: false*/
+/*global module, require, sinon*/
+/**
+ * Assertions matching the test spy retrieval interface.
+ *
+ * @author Christian Johansen ([email protected])
+ * @license BSD
+ *
+ * Copyright (c) 2010-2011 Christian Johansen
+ */
+
+(function (sinon, global) {
+ var commonJSModule = typeof module == "object" && typeof require == "function";
+ var slice = Array.prototype.slice;
+ var assert;
+
+ if (!sinon && commonJSModule) {
+ sinon = require("../sinon");
+ }
+
+ if (!sinon) {
+ return;
+ }
+
+ function verifyIsStub() {
+ var method;
+
+ for (var i = 0, l = arguments.length; i < l; ++i) {
+ method = arguments[i];
+
+ if (!method) {
+ assert.fail("fake is not a spy");
+ }
+
+ if (typeof method != "function") {
+ assert.fail(method + " is not a function");
+ }
+
+ if (typeof method.getCall != "function") {
+ assert.fail(method + " is not stubbed");
+ }
+ }
+ }
+
+ function failAssertion(object, msg) {
+ object = object || global;
+ var failMethod = object.fail || assert.fail;
+ failMethod.call(object, msg);
+ }
+
+ function mirrorPropAsAssertion(name, method, message) {
+ if (arguments.length == 2) {
+ message = method;
+ method = name;
+ }
+
+ assert[name] = function (fake) {
+ verifyIsStub(fake);
+
+ var args = slice.call(arguments, 1);
+ var failed = false;
+
+ if (typeof method == "function") {
+ failed = !method(fake);
+ } else {
+ failed = typeof fake[method] == "function" ?
+ !fake[method].apply(fake, args) : !fake[method];
+ }
+
+ if (failed) {
+ failAssertion(this, fake.printf.apply(fake, [message].concat(args)));
+ } else {
+ assert.pass(name);
+ }
+ };
+ }
+
+ function exposedName(prefix, prop) {
+ return !prefix || /^fail/.test(prop) ? prop :
+ prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1);
+ };
+
+ assert = {
+ failException: "AssertError",
+
+ fail: function fail(message) {
+ var error = new Error(message);
+ error.name = this.failException || assert.failException;
+
+ throw error;
+ },
+
+ pass: function pass(assertion) {},
+
+ callOrder: function assertCallOrder() {
+ verifyIsStub.apply(null, arguments);
+ var expected = "", actual = "";
+
+ if (!sinon.calledInOrder(arguments)) {
+ try {
+ expected = [].join.call(arguments, ", ");
+ actual = sinon.orderByFirstCall(slice.call(arguments)).join(", ");
+ } catch (e) {
+ // If this fails, we'll just fall back to the blank string
+ }
+
+ failAssertion(this, "expected " + expected + " to be " +
+ "called in order but were called as " + actual);
+ } else {
+ assert.pass("callOrder");
+ }
+ },
+
+ callCount: function assertCallCount(method, count) {
+ verifyIsStub(method);
+
+ if (method.callCount != count) {
+ var msg = "expected %n to be called " + sinon.timesInWords(count) +
+ " but was called %c%C";
+ failAssertion(this, method.printf(msg));
+ } else {
+ assert.pass("callCount");
+ }
+ },
+
+ expose: function expose(target, options) {
+ if (!target) {
+ throw new TypeError("target is null or undefined");
+ }
+
+ var o = options || {};
+ var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix;
+ var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail;
+
+ for (var method in this) {
+ if (method != "export" && (includeFail || !/^(fail)/.test(method))) {
+ target[exposedName(prefix, method)] = this[method];
+ }
+ }
+
+ return target;
+ }
+ };
+
+ mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called");
+ mirrorPropAsAssertion("notCalled", function (spy) { return !spy.called; },
+ "expected %n to not have been called but was called %c%C");
+ mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C");
+ mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C");
+ mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C");
+ mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t");
+ mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t");
+ mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new");
+ mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new");
+ mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C");
+ mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C");
+ mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C");
+ mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C");
+ mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C");
+ mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C");
+ mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C");
+ mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C");
+ mirrorPropAsAssertion("threw", "%n did not throw exception%C");
+ mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C");
+
+ if (commonJSModule) {
+ module.exports = assert;
+ } else {
+ sinon.assert = assert;
+ }
+}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : global));
+
+return sinon;}.call(typeof window != 'undefined' && window || {}));
diff --git a/test/support/walk_dir.js b/test/support/walk_dir.js
new file mode 100644
index 00000000..ab4fef0e
--- /dev/null
+++ b/test/support/walk_dir.js
@@ -0,0 +1,43 @@
+var fs = require('fs');
+
+var methods = {
+ walk: function (dir, validation_function, cb) {
+ if (arguments.length === 2) {
+ cb = validation_function;
+ validation_function = null;
+ }
+
+ var results = [];
+ fs.readdir(dir, function (err, list) {
+ if (err) { return cb(err); }
+
+ var pending = list.length;
+
+ if (!pending) { return cb(null, results); }
+
+ list.forEach(function (file) {
+ file = dir + '/' + file;
+ fs.stat(file, function (err, stat) {
+ if (stat && stat.isDirectory()) {
+ methods.walk(file, validation_function, function (err, res) {
+ results = results.concat(res);
+ if (!--pending) { cb(null, results); }
+ });
+ } else {
+ if (typeof validation_function === 'function') {
+ if (validation_function(file)) {
+ results.push(file);
+ }
+ } else {
+ results.push(file);
+ }
+
+ if (!--pending) { cb(null, results); }
+ }
+ });
+ });
+ });
+ }
+};
+
+module.exports = methods;