[Pkg-javascript-commits] [libjs-jquery-stupidtable] 01/02: Imported Upstream version 1.0.1+dfsg
Sergio Durigan Junior
sergiodj-guest at moszumanska.debian.org
Sat Aug 13 18:55:03 UTC 2016
This is an automated email from the git hooks/post-receive script.
sergiodj-guest pushed a commit to branch master
in repository libjs-jquery-stupidtable.
commit cbb597eda4ff115331327ccb8d0608fa8503de9b
Author: Sergio Durigan Junior <sergiodj at sergiodj.net>
Date: Sat Aug 13 14:39:58 2016 -0400
Imported Upstream version 1.0.1+dfsg
---
LICENSE | 19 +
README.md | 231 ++
bower.json | 26 +
examples/basic.html | 77 +
examples/colspan.html | 73 +
examples/complex.html | 183 ++
examples/large-table.html | 5524 +++++++++++++++++++++++++++++++++++++++++++++
stupidtable.js | 135 ++
tests/qunit.css | 260 +++
tests/qunit.js | 2212 ++++++++++++++++++
tests/test-min.html | 194 ++
tests/test.html | 193 ++
tests/tests.js | 598 +++++
13 files changed, 9725 insertions(+)
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..5b0030d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2012 Joseph McCullough
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..40576e8
--- /dev/null
+++ b/README.md
@@ -0,0 +1,231 @@
+Stupid jQuery Table Sort
+========================
+
+This is a stupid jQuery table sorting plugin. Nothing fancy, nothing really
+impressive. Overall, stupidly simple. Requires jQuery 1.7 or newer.
+
+[View the demo here][0]
+
+See the example.html document to see how to implement it.
+
+
+Example Usage
+-------------
+
+The JS:
+
+ $("table").stupidtable();
+
+The HTML:
+
+ <table>
+ <thead>
+ <tr>
+ <th data-sort="int">int</th>
+ <th data-sort="float">float</th>
+ <th data-sort="string">string</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>15</td>
+ <td>-.18</td>
+ <td>banana</td>
+ </tr>
+ ...
+ ...
+ ...
+
+The thead and tbody tags must be used.
+
+Add a `data-sort` attribute of "DATATYPE" to the th elements to make them sortable
+by that data type. If you don't want that column to be sortable, just omit the
+`data-sort` attribute.
+
+
+Predefined data types
+---------------------
+
+Our aim is to keep this plugin as lightweight as possible. Consequently, the
+only predefined datatypes that you can pass to the th elements are
+
+* `int`
+* `float`
+* `string` (case-sensitive)
+* `string-ins` (case-insensitive)
+
+These data types will be sufficient for many simple tables. However, if you need
+different data types for sorting, you can easily create your own!
+
+Data with multiple representations/predefined order
+---------------------------------------------------
+
+Stupid Table lets you sort a column by computer friendly values while displaying
+human friendly values via the `data-sort-value` attribute on a td element. For
+example, to sort timestamps (computer friendly) but display pretty formated
+dates (human friendly)
+
+ <table>
+ <thead>
+ <tr>
+ <th data-sort="string">Name</th>
+ <th data-sort="int">Birthday</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Joe McCullough</td>
+ <td data-sort-value="672537600">April 25, 1991</td>
+ </tr>
+ <tr>
+ <td>Clint Dempsey</td>
+ <td data-sort-value="416016000">March 9, 1983</td>
+ </tr>
+ ...
+ ...
+ ...
+
+In this example, Stupid Table will sort the Birthday column by the timestamps
+provided in the `data-sort-value` attributes of the corresponding tds. Since
+timestamps are integers, and that's what we're sorting the column by, we specify
+the Birthday column as an `int` column in the `data-sort` value of the column
+header.
+
+
+Default sorting direction
+-------------------------
+
+By default, columns will sort ascending. You can specify a column to sort "asc"
+or "desc" first.
+
+ <table>
+ <thead>
+ <tr>
+ <th data-sort="float" data-sort-default="desc">float</th>
+ ...
+ </tr>
+ </thead>
+ </table>
+
+Sorting a column programatically
+--------------------------------
+
+After you have called `$("#mytable").stupidtable()`, if you wish to sort a
+column without requiring the user to click on it, select the column th and call
+
+
+ var $table = $("#mytable").stupidtable();
+ var $th_to_sort = $table.find("thead th").eq(0);
+ $th_to_sort.stupidsort();
+
+ // You can also force a direction.
+ $th_to_sort.stupidsort('asc');
+ $th_to_sort.stupidsort('desc');
+
+Updating a table cell's value
+-----------------------------
+
+If you wish for Stupid Table to respond to changes in the table cell values, you
+must explicitely inform Stupid Table to update its cache with the new values. If
+you update the table display/sort values without using this mechanism, your
+newly updated table **will not sort correctly!**
+
+ /*
+ * Suppose $age_td is some td in a table under a column specified as an int
+ * column. stupidtable() must already be called for this table.
+ */
+ $age_td.updateSortVal(23);
+
+Note that this only changes the internal sort value (whether you specified a
+`data-sort-value` or not). Use the standard jQuery `.text()` / `.html()` methods
+if you wish to change the display values.
+
+
+Callbacks
+---------
+
+To execute a callback function after a table column has been sorted, you can
+bind on `aftertablesort`.
+
+ var table = $("table").stupidtable();
+ table.bind('aftertablesort', function (event, data) {
+ // data.column - the index of the column sorted after a click
+ // data.direction - the sorting direction (either asc or desc)
+ // $(this) - this table object
+
+ console.log("The sorting direction: " + data.direction);
+ console.log("The column index: " + data.column);
+ });
+
+Similarly, to execute a callback before a table column has been sorted, you can
+bind on `beforetablesort`.
+
+See the complex_example.html file.
+
+Creating your own data types
+----------------------------
+
+Sometimes you don't have control over the HTML produced by the backend. In the
+event you need to sort complex data without a `data-sort-value` attribute, you
+can create your own data type. Creating your own data type for sorting purposes
+is easy as long as you are comfortable using custom functions for sorting.
+Consult [Mozilla's Docs][1] if you're not.
+
+Let's create an alphanum datatype for a User ID that takes strings in the form
+"D10", "A40", and sorts the column based on the numbers in the string.
+
+ <thead>
+ <tr>
+ <th data-sort="string">Name</th>
+ <th data-sort="int">Age</th>
+ <th data-sort="alphanum">UserID</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Joseph McCullough</td>
+ <td>20</td>
+ <td>D10</td>
+ </tr>
+ <tr>
+ <td>Justin Edwards</td>
+ <td>29</td>
+ <td>A40</td>
+ </tr>
+ ...
+ ...
+ ...
+
+Now we need to specify how the **alphanum** type will be sorted. To do that,
+we do the following:
+
+ $("table").stupidtable({
+ "alphanum":function(a,b){
+
+ var pattern = "^[A-Z](\\d+)$";
+ var re = new RegExp(pattern);
+
+ var aNum = re.exec(a).slice(1);
+ var bNum = re.exec(b).slice(1);
+
+ return parseInt(aNum,10) - parseInt(bNum,10);
+ }
+ });
+
+This extracts the integers from the cell and compares them in the style
+that sort functions use.
+
+License
+-------
+
+The Stupid jQuery Plugin is licensed under the MIT license. See the LICENSE
+file for full details.
+
+Tests
+-----
+
+Visit `tests/test.html` in your browser to run the QUnit tests.
+
+
+[0]: http://joequery.github.io/Stupid-Table-Plugin/
+[1]: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort
diff --git a/bower.json b/bower.json
new file mode 100644
index 0000000..c2b5161
--- /dev/null
+++ b/bower.json
@@ -0,0 +1,26 @@
+{
+ "name": "jquery-stupid-table",
+ "version": "1.0.1",
+ "homepage": "https://github.com/joequery/Stupid-Table-Plugin",
+ "authors": [
+ "Joseph McCullough"
+ ],
+ "description": "A stupidly small and simple jQuery table sorter plugin",
+ "main": "stupidtable.min.js",
+ "dependencies": {
+ "jquery": ">= 1.7.0"
+ },
+ "keywords": [
+ "jquery",
+ "table",
+ "sort"
+ ],
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ]
+}
diff --git a/examples/basic.html b/examples/basic.html
new file mode 100644
index 0000000..11e4341
--- /dev/null
+++ b/examples/basic.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Stupid jQuery table sort</title>
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+ <script src="../stupidtable.js?dev"></script>
+ <script>
+ $(function(){
+ $("table").stupidtable();
+ });
+ </script>
+ <style type="text/css">
+ table {
+ border-collapse: collapse;
+ }
+ th, td {
+ padding: 5px 10px;
+ border: 1px solid #999;
+ }
+ th {
+ background-color: #eee;
+ }
+ th[data-sort]{
+ cursor:pointer;
+ }
+ tr.awesome{
+ color: red;
+ }
+ </style>
+ </style>
+</head>
+
+<body>
+
+ <h1>Stupid jQuery table sort!</h1>
+
+ <p>This example shows how a sortable table can be implemented with very little configuration. Simply specify the data type on a <code><th></code> element using the <code>data-sort</code> attribute, and the plugin handles the rest.</p>
+
+ <table>
+ <thead>
+ <tr>
+ <th data-sort="int">int</th>
+ <th data-sort="float">float</th>
+ <th data-sort="string">string</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>15</td>
+ <td>-.18</td>
+ <td>banana</td>
+ </tr>
+ <tr class="awesome">
+ <td>95</td>
+ <td>36</td>
+ <td>coke</td>
+ </tr>
+ <tr>
+ <td>2</td>
+ <td>-152.5</td>
+ <td>apple</td>
+ </tr>
+ <tr>
+ <td>-53</td>
+ <td>88.5</td>
+ <td>zebra</td>
+ </tr>
+ <tr>
+ <td>195</td>
+ <td>-858</td>
+ <td>orange</td>
+ </tr>
+ </tbody>
+ </table>
+
+</body>
+</html>
diff --git a/examples/colspan.html b/examples/colspan.html
new file mode 100644
index 0000000..148d9e4
--- /dev/null
+++ b/examples/colspan.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Stupid jQuery table sort (colspan test)</title>
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+ <script src="../stupidtable.js?dev"></script>
+ <script>
+ $(function(){
+ $("table").stupidtable();
+ });
+ </script>
+ <style type="text/css">
+ table {
+ border-collapse: collapse;
+ }
+ th, td {
+ padding: 5px 10px;
+ border: 1px solid #999;
+ }
+ th {
+ background-color: #eee;
+ }
+ th[data-sort]{
+ cursor:pointer;
+ }
+ tr.awesome{
+ color: red;
+ }
+ </style>
+ </style>
+</head>
+
+<body>
+
+ <h1>Stupid jQuery table sort! (colspan test)</h1>
+
+ <p>Tables using colspans are handled just fine.</p>
+
+ <table id="stupid">
+ <thead>
+ <tr>
+ <th colspan="4">The Big Table Header</th>
+ </tr>
+ <tr>
+ <th data-sort="string">Letter</td>
+ <th colspan="2" data-sort="string">colspan=2</th>
+ <th data-sort="int">Number</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>def</td>
+ <td>X</td>
+ <td>9</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>abc</td>
+ <td>Z</td>
+ <td>8</td>
+ <td>2</td>
+ </tr>
+ <tr>
+ <td>bcd</td>
+ <td>Y</td>
+ <td>7</td>
+ <td>0</td>
+ </tr>
+ </tbody>
+ </table>
+
+</body>
+</html>
diff --git a/examples/complex.html b/examples/complex.html
new file mode 100644
index 0000000..75e4ee3
--- /dev/null
+++ b/examples/complex.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Stupid jQuery table sort (complex example)</title>
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+ <script src="../stupidtable.js?dev"></script>
+ <script>
+ $(function(){
+ // Helper function to convert a string of the form "Mar 15, 1987" into
+ // a Date object.
+ var date_from_string = function(str){
+ var months = ["jan","feb","mar","apr","may","jun","jul",
+ "aug","sep","oct","nov","dec"];
+ var pattern = "^([a-zA-Z]{3})\\s*(\\d{2}),\\s*(\\d{4})$";
+ var re = new RegExp(pattern);
+ var DateParts = re.exec(str).slice(1);
+
+ var Year = DateParts[2];
+ var Month = $.inArray(DateParts[0].toLowerCase(), months);
+ var Day = DateParts[1];
+ return new Date(Year, Month, Day);
+ }
+
+ var moveBlanks = function(a, b) {
+ if ( a < b ){
+ if (a == "")
+ return 1;
+ else
+ return -1;
+ }
+ if ( a > b ){
+ if (b == "")
+ return -1;
+ else
+ return 1;
+ }
+ return 0;
+ };
+ var moveBlanksDesc = function(a, b) {
+ // Blanks are by definition the smallest value, so we don't have to
+ // worry about them here
+ if ( a < b )
+ return 1;
+ if ( a > b )
+ return -1;
+ return 0;
+ };
+
+ var table = $("table").stupidtable({
+ "date":function(a,b){
+ // Get these into date objects for comparison.
+
+ aDate = date_from_string(a);
+ bDate = date_from_string(b);
+
+ return aDate - bDate;
+ },
+ "moveBlanks": moveBlanks,
+ "moveBlanksDesc": moveBlanksDesc,
+ });
+
+ table.on("beforetablesort", function (event, data) {
+ // data.column - the index of the column sorted after a click
+ // data.direction - the sorting direction (either asc or desc)
+ $("#msg").text("Sorting index " + data.column)
+ });
+
+ table.on("aftertablesort", function (event, data) {
+ var th = $(this).find("th");
+ th.find(".arrow").remove();
+ var dir = $.fn.stupidtable.dir;
+
+ var arrow = data.direction === dir.ASC ? "↑" : "↓";
+ th.eq(data.column).append('<span class="arrow">' + arrow +'</span>');
+ });
+
+ $("tr").slice(1).click(function(){
+ $(".awesome").removeClass("awesome");
+ $(this).addClass("awesome");
+ });
+
+ });
+ </script>
+ <style type="text/css">
+ table {
+ border-collapse: collapse;
+ }
+ th, td {
+ padding: 5px 10px;
+ border: 1px solid #999;
+ }
+ th {
+ background-color: #eee;
+ }
+ th[data-sort]{
+ cursor:pointer;
+ }
+ tr.awesome{
+ color: red;
+ }
+ #msg {
+ color: green;
+ }
+ </style>
+</head>
+
+<body>
+
+ <h1>Stupid jQuery table sort! (complex example)</h1>
+
+ <p>This example showcases several of the more advanced features, including specifying sort values, custom data types and callbacks. View the source of this file or see the <a href="http://joequery.github.com/Stupid-Table-Plugin/">documentation</a> for more details on how to implement them.</p>
+
+ <p id="msg"> </p>
+
+ <table>
+ <thead>
+ <tr>
+ <th data-sort="int">int</th>
+ <th data-sort="int">int</th>
+ <th data-sort="float" data-sort-default="desc">float</th>
+ <th data-sort="moveBlanks" data-sort-desc="moveBlanksDesc">string</th>
+ <th data-sort="string-ins">case</th>
+ <th>Can't sort me!</th>
+ <th data-sort="date">date</th>
+ <th data-sort="int">Letter frequency</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>15</td>
+ <td>15</td>
+ <td>-.18</td>
+ <td>banana</td>
+ <td>Homer</td>
+ <td>arbitrary</td>
+ <td>Sep 15, 2002</td>
+ <td data-sort-value="0">E</td>
+ </tr>
+ <tr class="awesome">
+ <td>95</td>
+ <td>95</td>
+ <td>36</td>
+ <td></td>
+ <td>purple</td>
+ <td>pointless</td>
+ <td>Aug 07, 2004</td>
+ <td data-sort-value="1">T</td>
+ </tr>
+ <tr>
+ <td>2</td>
+ <td>2</td>
+ <td>-152.5</td>
+ <td></td>
+ <td>is</td>
+ <td>silly</td>
+ <td>Mar 15, 1986</td>
+ <td data-sort-value="2">A</td>
+ </tr>
+ <tr>
+ <td>-53</td>
+ <td>-53</td>
+ <td>88.5</td>
+ <td>hello</td>
+ <td>a</td>
+ <td>eccentric</td>
+ <td>Feb 27, 2086</td>
+ <td data-sort-value="3">O</td>
+ </tr>
+ <tr>
+ <td>195</td>
+ <td>195</td>
+ <td>-858</td>
+ <td>orange</td>
+ <td>fruit</td>
+ <td>garbage</td>
+ <td>Mar 15, 1986</td>
+ <td data-sort-value="4">I</td>
+ </tr>
+ </tbody>
+ </table>
+
+</body>
+</html>
diff --git a/examples/large-table.html b/examples/large-table.html
new file mode 100644
index 0000000..926100c
--- /dev/null
+++ b/examples/large-table.html
@@ -0,0 +1,5524 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Stupid jQuery table sort (large table example)</title>
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+ <script src="../stupidtable.js?dev"></script>
+ <script>
+ $(function(){
+ // Helper function to convert a string of the form "Mar 15, 1987" into a Date object.
+ var date_from_string = function(str) {
+ var months = ["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"];
+ var pattern = "^([a-zA-Z]{3})\\s*(\\d{1,2}),\\s*(\\d{4})$";
+ var re = new RegExp(pattern);
+ var DateParts = re.exec(str).slice(1);
+
+ var Year = DateParts[2];
+ var Month = $.inArray(DateParts[0].toLowerCase(), months);
+ var Day = DateParts[1];
+
+ return new Date(Year, Month, Day);
+ }
+
+ var table = $("table").stupidtable({
+ "date": function(a,b) {
+ // Get these into date objects for comparison.
+ aDate = date_from_string(a);
+ bDate = date_from_string(b);
+ return aDate - bDate;
+ }
+ });
+
+ table.on("beforetablesort", function (event, data) {
+ // Apply a "disabled" look to the table while sorting.
+ // Using addClass for "testing" as it takes slightly longer to render.
+ $("#msg").text("Sorting...");
+ $("table").addClass("disabled");
+ });
+
+ table.on("aftertablesort", function (event, data) {
+ // Reset loading message.
+ $("#msg").html(" ");
+ $("table").removeClass("disabled");
+
+ var th = $(this).find("th");
+ th.find(".arrow").remove();
+ var dir = $.fn.stupidtable.dir;
+
+ var arrow = data.direction === dir.ASC ? "↑" : "↓";
+ th.eq(data.column).append('<span class="arrow">' + arrow +'</span>');
+ });
+ });
+ </script>
+ <style type="text/css">
+ body {
+ font-family: "Ubuntu", "Trebuchet MS", sans-serif;
+ }
+ table {
+ border-collapse: collapse;
+ margin: 1em auto;
+ }
+ th, td {
+ padding: 5px 10px;
+ border: 1px solid #999;
+ font-size: 12px;
+ }
+ th {
+ background-color: #eee;
+ }
+ th[data-sort]{
+ cursor:pointer;
+ }
+
+ /* just some random additional styles for a more real-world situation */
+ #msg {
+ color: #0a0;
+ text-align: center;
+ }
+ td.name {
+ font-weight: bold;
+ }
+ td.email {
+ color: #666;
+ text-decoration: underline;
+ }
+ /* zebra-striping seems to really slow down Opera sometimes */
+ tr:nth-child(even) > td {
+ background-color: #f9f9f7;
+ }
+ tr:nth-child(odd) > td {
+ background-color: #ffffff;
+ }
+ .disabled {
+ opacity: 0.5;
+ }
+ </style>
+</head>
+
+<body>
+
+ <h1>Stupid jQuery table sort! (large table example)</h1>
+
+ <p>This is a large table of over 500 rows to show the plugin can handle large data sets with ease. It includes a mix of styling to mimic a more realistic website scenario. It also provides a better example of the <code>beforetablesort</code> callback by styling the table to appear <q>disabled</q> during sorting.</p>
+
+ <p id="msg"> </p>
+
+ <!-- data taken from generatedata.com -->
+ <table>
+ <thead>
+ <tr>
+ <th data-sort="string">First name</th>
+ <th data-sort="string">Last name</th>
+ <th data-sort="string">City</th>
+ <th data-sort="string">Country</th>
+ <th>Email</th>
+ <th data-sort="date">Registered</th>
+ <th data-sort="int">ID</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Emmanuel</td>
+ <td class="name">Owen</td>
+ <td>Needham</td>
+ <td>Pakistan</td>
+ <td class="email">elit@aliquetdiam.com</td>
+ <td>Nov 18, 2011</td>
+ <td>17321</td>
+ </tr>
+ <tr>
+ <td>Stewart</td>
+ <td class="name">Dillard</td>
+ <td>South Portland</td>
+ <td>Italy</td>
+ <td class="email">justo.Proin.non@utmolestie.ca</td>
+ <td>Dec 30, 2012</td>
+ <td>94003</td>
+ </tr>
+ <tr>
+ <td>Tana</td>
+ <td class="name">Villarreal</td>
+ <td>Waltham</td>
+ <td>Solomon Islands</td>
+ <td class="email">Proin.eget@tinciduntvehicula.edu</td>
+ <td>Mar 25, 2012</td>
+ <td>44041</td>
+ </tr>
+ <tr>
+ <td>Wendy</td>
+ <td class="name">Greer</td>
+ <td>Bellflower</td>
+ <td>Mauritania</td>
+ <td class="email">arcu@Duis.org</td>
+ <td>Mar 6, 2011</td>
+ <td>80251</td>
+ </tr>
+ <tr>
+ <td>Kenneth</td>
+ <td class="name">Livingston</td>
+ <td>Anaheim</td>
+ <td>Honduras</td>
+ <td class="email">dolor.sit.amet@purus.ca</td>
+ <td>Jun 20, 2012</td>
+ <td>79773</td>
+ </tr>
+ <tr>
+ <td>Holly</td>
+ <td class="name">Strong</td>
+ <td>Placentia</td>
+ <td>Greenland</td>
+ <td class="email">Sed.eget.lacus@mollisDuis.edu</td>
+ <td>Jul 22, 2012</td>
+ <td>56903</td>
+ </tr>
+ <tr>
+ <td>Lynn</td>
+ <td class="name">Cooley</td>
+ <td>Temecula</td>
+ <td>Papua New Guinea</td>
+ <td class="email">Quisque.ornare.tortor@senectusetnetus.com</td>
+ <td>Apr 12, 2012</td>
+ <td>68541</td>
+ </tr>
+ <tr>
+ <td>Shafira</td>
+ <td class="name">Valdez</td>
+ <td>Columbus</td>
+ <td>Taiwan, Province of China</td>
+ <td class="email">Praesent@erosnec.org</td>
+ <td>Aug 15, 2011</td>
+ <td>67777</td>
+ </tr>
+ <tr>
+ <td>Autumn</td>
+ <td class="name">Barry</td>
+ <td>Malden</td>
+ <td>Serbia and Montenegro</td>
+ <td class="email">eget.lacus@et.com</td>
+ <td>Oct 19, 2011</td>
+ <td>32595</td>
+ </tr>
+ <tr>
+ <td>Hadassah</td>
+ <td class="name">Berry</td>
+ <td>Ketchikan</td>
+ <td>Egypt</td>
+ <td class="email">ligula.Aenean.euismod@metus.com</td>
+ <td>May 29, 2012</td>
+ <td>58898</td>
+ </tr>
+ <tr>
+ <td>Hector</td>
+ <td class="name">Burns</td>
+ <td>Kokomo</td>
+ <td>Monaco</td>
+ <td class="email">dolor.Nulla.semper@atiaculisquis.edu</td>
+ <td>Jun 22, 2012</td>
+ <td>44279</td>
+ </tr>
+ <tr>
+ <td>Eagan</td>
+ <td class="name">Carr</td>
+ <td>Jeannette</td>
+ <td>Slovakia</td>
+ <td class="email">pede.Cras.vulputate@felis.org</td>
+ <td>May 3, 2011</td>
+ <td>52817</td>
+ </tr>
+ <tr>
+ <td>Charissa</td>
+ <td class="name">Barker</td>
+ <td>Meadville</td>
+ <td>New Zealand</td>
+ <td class="email">eu@duiquisaccumsan.edu</td>
+ <td>Jun 18, 2012</td>
+ <td>20900</td>
+ </tr>
+ <tr>
+ <td>Abigail</td>
+ <td class="name">Holman</td>
+ <td>Dubuque</td>
+ <td>Kiribati</td>
+ <td class="email">ultrices@semper.ca</td>
+ <td>Nov 28, 2011</td>
+ <td>36026</td>
+ </tr>
+ <tr>
+ <td>Caesar</td>
+ <td class="name">Carver</td>
+ <td>Jordan Valley</td>
+ <td>Mexico</td>
+ <td class="email">tristique.ac.eleifend@nequetellus.com</td>
+ <td>Feb 1, 2012</td>
+ <td>14537</td>
+ </tr>
+ <tr>
+ <td>Jade</td>
+ <td class="name">Juarez</td>
+ <td>Billings</td>
+ <td>Zimbabwe</td>
+ <td class="email">volutpat@Proin.ca</td>
+ <td>May 12, 2012</td>
+ <td>40574</td>
+ </tr>
+ <tr>
+ <td>Barbara</td>
+ <td class="name">Shields</td>
+ <td>Saint Joseph</td>
+ <td>Germany</td>
+ <td class="email">dui@Quisquefringilla.org</td>
+ <td>Dec 7, 2011</td>
+ <td>48920</td>
+ </tr>
+ <tr>
+ <td>Rose</td>
+ <td class="name">Pace</td>
+ <td>Moraga</td>
+ <td>Ecuador</td>
+ <td class="email">iaculis@nasceturridiculus.org</td>
+ <td>Apr 12, 2011</td>
+ <td>92908</td>
+ </tr>
+ <tr>
+ <td>Nero</td>
+ <td class="name">William</td>
+ <td>Hutchinson</td>
+ <td>Serbia and Montenegro</td>
+ <td class="email">euismod.enim.Etiam@sapien.com</td>
+ <td>Dec 30, 2011</td>
+ <td>10398</td>
+ </tr>
+ <tr>
+ <td>Lucy</td>
+ <td class="name">Mcclain</td>
+ <td>South El Monte</td>
+ <td>Holy See (Vatican City State)</td>
+ <td class="email">elementum.sem.vitae@purus.org</td>
+ <td>Jun 17, 2012</td>
+ <td>75898</td>
+ </tr>
+ <tr>
+ <td>Thor</td>
+ <td class="name">Kelly</td>
+ <td>Jeffersonville</td>
+ <td>Liberia</td>
+ <td class="email">pellentesque.massa.lobortis@Sed.com</td>
+ <td>Nov 11, 2011</td>
+ <td>59789</td>
+ </tr>
+ <tr>
+ <td>Edward</td>
+ <td class="name">Barron</td>
+ <td>Mandan</td>
+ <td>Paraguay</td>
+ <td class="email">sed.dolor.Fusce@elementum.ca</td>
+ <td>Mar 13, 2011</td>
+ <td>74375</td>
+ </tr>
+ <tr>
+ <td>Aaron</td>
+ <td class="name">Hansen</td>
+ <td>Florence</td>
+ <td>Svalbard and Jan Mayen</td>
+ <td class="email">ligula.Aenean.euismod@dolornonummyac.org</td>
+ <td>Jun 2, 2012</td>
+ <td>70820</td>
+ </tr>
+ <tr>
+ <td>Mohammad</td>
+ <td class="name">Mcfadden</td>
+ <td>Cicero</td>
+ <td>Bolivia</td>
+ <td class="email">nunc@vulputateullamcorpermagna.com</td>
+ <td>Sep 16, 2011</td>
+ <td>23056</td>
+ </tr>
+ <tr>
+ <td>Mia</td>
+ <td class="name">Marshall</td>
+ <td>Columbia</td>
+ <td>Colombia</td>
+ <td class="email">gravida@nibhsitamet.edu</td>
+ <td>Aug 21, 2012</td>
+ <td>52458</td>
+ </tr>
+ <tr>
+ <td>Chester</td>
+ <td class="name">Alvarez</td>
+ <td>Springfield</td>
+ <td>Lesotho</td>
+ <td class="email">augue.eu.tellus@semegestasblandit.org</td>
+ <td>Oct 29, 2012</td>
+ <td>44765</td>
+ </tr>
+ <tr>
+ <td>Kelsey</td>
+ <td class="name">Douglas</td>
+ <td>Winnemucca</td>
+ <td>Pitcairn</td>
+ <td class="email">diam.Pellentesque@sagittisDuis.edu</td>
+ <td>Apr 5, 2011</td>
+ <td>90683</td>
+ </tr>
+ <tr>
+ <td>Erin</td>
+ <td class="name">Sims</td>
+ <td>La Habra</td>
+ <td>Liberia</td>
+ <td class="email">ac@egestaslacinia.edu</td>
+ <td>Jan 28, 2012</td>
+ <td>57282</td>
+ </tr>
+ <tr>
+ <td>Colt</td>
+ <td class="name">Harper</td>
+ <td>Mayagüez</td>
+ <td>Bangladesh</td>
+ <td class="email">lacus.Nulla.tincidunt@idanteNunc.com</td>
+ <td>Jul 13, 2011</td>
+ <td>34013</td>
+ </tr>
+ <tr>
+ <td>Xantha</td>
+ <td class="name">Ross</td>
+ <td>Lufkin</td>
+ <td>United States Minor Outlying Islands</td>
+ <td class="email">Nulla.facilisis@eu.edu</td>
+ <td>Aug 6, 2012</td>
+ <td>26764</td>
+ </tr>
+ <tr>
+ <td>Aiko</td>
+ <td class="name">Gill</td>
+ <td>Asbury Park</td>
+ <td>Kyrgyzstan</td>
+ <td class="email">tincidunt.aliquam.arcu@dui.ca</td>
+ <td>Jan 15, 2012</td>
+ <td>45134</td>
+ </tr>
+ <tr>
+ <td>Stacey</td>
+ <td class="name">Barron</td>
+ <td>Salem</td>
+ <td>India</td>
+ <td class="email">sed@purusmaurisa.edu</td>
+ <td>Apr 3, 2012</td>
+ <td>16321</td>
+ </tr>
+ <tr>
+ <td>Aurora</td>
+ <td class="name">Craig</td>
+ <td>Stillwater</td>
+ <td>Morocco</td>
+ <td class="email">tristique@Praesenteu.com</td>
+ <td>Aug 23, 2012</td>
+ <td>55429</td>
+ </tr>
+ <tr>
+ <td>Geoffrey</td>
+ <td class="name">Kirby</td>
+ <td>Sonoma</td>
+ <td>Heard Island and Mcdonald Islands</td>
+ <td class="email">lectus.Cum.sociis@aliquetvel.edu</td>
+ <td>Feb 11, 2012</td>
+ <td>36110</td>
+ </tr>
+ <tr>
+ <td>Kylynn</td>
+ <td class="name">Sweeney</td>
+ <td>Gilbert</td>
+ <td>Greece</td>
+ <td class="email">nulla@est.com</td>
+ <td>Mar 27, 2011</td>
+ <td>31878</td>
+ </tr>
+ <tr>
+ <td>Celeste</td>
+ <td class="name">Gilliam</td>
+ <td>Ketchikan</td>
+ <td>Armenia</td>
+ <td class="email">lobortis.tellus.justo@asollicitudin.ca</td>
+ <td>Oct 18, 2011</td>
+ <td>90753</td>
+ </tr>
+ <tr>
+ <td>Travis</td>
+ <td class="name">Buckner</td>
+ <td>Hot Springs</td>
+ <td>Saint Pierre and Miquelon</td>
+ <td class="email">erat.volutpat@pharetraut.org</td>
+ <td>Sep 1, 2012</td>
+ <td>50696</td>
+ </tr>
+ <tr>
+ <td>Deanna</td>
+ <td class="name">Buckner</td>
+ <td>Gloversville</td>
+ <td>Mongolia</td>
+ <td class="email">dolor.tempus@quis.org</td>
+ <td>Mar 6, 2012</td>
+ <td>36838</td>
+ </tr>
+ <tr>
+ <td>Nicholas</td>
+ <td class="name">Vang</td>
+ <td>North Chicago</td>
+ <td>Cameroon</td>
+ <td class="email">elit.pretium.et@nisiMaurisnulla.ca</td>
+ <td>Jun 10, 2012</td>
+ <td>57392</td>
+ </tr>
+ <tr>
+ <td>Dominic</td>
+ <td class="name">Thompson</td>
+ <td>North Little Rock</td>
+ <td>Oman</td>
+ <td class="email">nibh.Donec@Aenean.edu</td>
+ <td>Oct 21, 2012</td>
+ <td>63825</td>
+ </tr>
+ <tr>
+ <td>Kenyon</td>
+ <td class="name">Good</td>
+ <td>Port Arthur</td>
+ <td>Thailand</td>
+ <td class="email">libero.est.congue@Duisrisus.org</td>
+ <td>Sep 16, 2011</td>
+ <td>33424</td>
+ </tr>
+ <tr>
+ <td>Dominique</td>
+ <td class="name">Gentry</td>
+ <td>Clemson</td>
+ <td>Turkey</td>
+ <td class="email">est.mauris@Craslorem.org</td>
+ <td>Nov 16, 2011</td>
+ <td>52636</td>
+ </tr>
+ <tr>
+ <td>Rachel</td>
+ <td class="name">Robinson</td>
+ <td>Hastings</td>
+ <td>Iran, Islamic Republic of</td>
+ <td class="email">dolor.Quisque@urnanec.edu</td>
+ <td>Dec 20, 2011</td>
+ <td>68943</td>
+ </tr>
+ <tr>
+ <td>Beau</td>
+ <td class="name">Murray</td>
+ <td>Aguadilla</td>
+ <td>Slovenia</td>
+ <td class="email">ipsum.Suspendisse@accumsansedfacilisis.ca</td>
+ <td>Jun 23, 2011</td>
+ <td>64758</td>
+ </tr>
+ <tr>
+ <td>Fay</td>
+ <td class="name">Coffey</td>
+ <td>Waterloo</td>
+ <td>Liberia</td>
+ <td class="email">sed@anteNunc.org</td>
+ <td>Jun 29, 2011</td>
+ <td>23261</td>
+ </tr>
+ <tr>
+ <td>Anjolie</td>
+ <td class="name">Hudson</td>
+ <td>Villa Park</td>
+ <td>Israel</td>
+ <td class="email">Aliquam.erat.volutpat@sedest.ca</td>
+ <td>Sep 12, 2012</td>
+ <td>61595</td>
+ </tr>
+ <tr>
+ <td>Aurora</td>
+ <td class="name">Wilcox</td>
+ <td>Des Moines</td>
+ <td>Belgium</td>
+ <td class="email">lorem.tristique.aliquet@mauris.ca</td>
+ <td>Aug 1, 2011</td>
+ <td>94743</td>
+ </tr>
+ <tr>
+ <td>Graiden</td>
+ <td class="name">Cantu</td>
+ <td>Caguas</td>
+ <td>French Guiana</td>
+ <td class="email">dui.nec@ornareInfaucibus.ca</td>
+ <td>Aug 26, 2012</td>
+ <td>47270</td>
+ </tr>
+ <tr>
+ <td>Ifeoma</td>
+ <td class="name">Snyder</td>
+ <td>Stockton</td>
+ <td>Grenada</td>
+ <td class="email">pede@duiSuspendisseac.edu</td>
+ <td>Dec 21, 2012</td>
+ <td>64082</td>
+ </tr>
+ <tr>
+ <td>Fatima</td>
+ <td class="name">Dillard</td>
+ <td>Minot</td>
+ <td>Malta</td>
+ <td class="email">vitae@risus.edu</td>
+ <td>Jun 5, 2012</td>
+ <td>22642</td>
+ </tr>
+ <tr>
+ <td>Elvis</td>
+ <td class="name">Hurst</td>
+ <td>Fairfax</td>
+ <td>Iraq</td>
+ <td class="email">sem.ut.dolor@Fuscemi.edu</td>
+ <td>Jul 31, 2011</td>
+ <td>49754</td>
+ </tr>
+ <tr>
+ <td>Tyrone</td>
+ <td class="name">Medina</td>
+ <td>Fond du Lac</td>
+ <td>Serbia and Montenegro</td>
+ <td class="email">sapien.cursus.in@Nunccommodo.com</td>
+ <td>Sep 18, 2012</td>
+ <td>71427</td>
+ </tr>
+ <tr>
+ <td>Eleanor</td>
+ <td class="name">Moran</td>
+ <td>Ventura</td>
+ <td>Switzerland</td>
+ <td class="email">lorem@dolor.org</td>
+ <td>Jun 25, 2011</td>
+ <td>37410</td>
+ </tr>
+ <tr>
+ <td>Maris</td>
+ <td class="name">Thomas</td>
+ <td>Roswell</td>
+ <td>Uganda</td>
+ <td class="email">sagittis@velmaurisInteger.edu</td>
+ <td>Feb 1, 2012</td>
+ <td>13281</td>
+ </tr>
+ <tr>
+ <td>Herman</td>
+ <td class="name">Webster</td>
+ <td>Oak Ridge</td>
+ <td>Peru</td>
+ <td class="email">non.justo.Proin@Class.com</td>
+ <td>Jul 6, 2011</td>
+ <td>64747</td>
+ </tr>
+ <tr>
+ <td>Vladimir</td>
+ <td class="name">Mccormick</td>
+ <td>Durant</td>
+ <td>Taiwan, Province of China</td>
+ <td class="email">orci.in@montes.ca</td>
+ <td>Feb 6, 2011</td>
+ <td>74553</td>
+ </tr>
+ <tr>
+ <td>Whilemina</td>
+ <td class="name">Mcbride</td>
+ <td>New Castle</td>
+ <td>Puerto Rico</td>
+ <td class="email">Maecenas.mi@sodales.ca</td>
+ <td>Sep 21, 2011</td>
+ <td>36301</td>
+ </tr>
+ <tr>
+ <td>Harper</td>
+ <td class="name">Fitzgerald</td>
+ <td>Duquesne</td>
+ <td>Antarctica</td>
+ <td class="email">feugiat.Lorem.ipsum@imperdietornare.edu</td>
+ <td>Aug 11, 2012</td>
+ <td>94535</td>
+ </tr>
+ <tr>
+ <td>Sybill</td>
+ <td class="name">Collins</td>
+ <td>Manassas</td>
+ <td>British Indian Ocean Territory</td>
+ <td class="email">gravida@Maecenaslibero.org</td>
+ <td>Aug 21, 2012</td>
+ <td>55119</td>
+ </tr>
+ <tr>
+ <td>Tallulah</td>
+ <td class="name">Mathews</td>
+ <td>Berkeley</td>
+ <td>Liechtenstein</td>
+ <td class="email">mauris@nondapibus.ca</td>
+ <td>Sep 24, 2012</td>
+ <td>39287</td>
+ </tr>
+ <tr>
+ <td>Scarlett</td>
+ <td class="name">Freeman</td>
+ <td>New Haven</td>
+ <td>Belarus</td>
+ <td class="email">tellus.justo@ipsum.ca</td>
+ <td>Jul 16, 2011</td>
+ <td>38373</td>
+ </tr>
+ <tr>
+ <td>Ursa</td>
+ <td class="name">Reid</td>
+ <td>Lockport</td>
+ <td>Kazakhstan</td>
+ <td class="email">malesuada.Integer.id@euaugue.org</td>
+ <td>Dec 13, 2011</td>
+ <td>13237</td>
+ </tr>
+ <tr>
+ <td>Whoopi</td>
+ <td class="name">Mendez</td>
+ <td>Nashville</td>
+ <td>Antarctica</td>
+ <td class="email">at@necmauris.com</td>
+ <td>Sep 2, 2011</td>
+ <td>59088</td>
+ </tr>
+ <tr>
+ <td>Summer</td>
+ <td class="name">Everett</td>
+ <td>St. Marys</td>
+ <td>Liberia</td>
+ <td class="email">Aliquam.adipiscing@lectus.edu</td>
+ <td>Nov 14, 2012</td>
+ <td>98078</td>
+ </tr>
+ <tr>
+ <td>Pascale</td>
+ <td class="name">Buckner</td>
+ <td>Rapid City</td>
+ <td>Dominican Republic</td>
+ <td class="email">Phasellus.elit@euismodindolor.edu</td>
+ <td>Jan 26, 2011</td>
+ <td>58219</td>
+ </tr>
+ <tr>
+ <td>Aladdin</td>
+ <td class="name">Ball</td>
+ <td>Charleston</td>
+ <td>Netherlands Antilles</td>
+ <td class="email">vel@ridiculusmus.ca</td>
+ <td>Jun 11, 2011</td>
+ <td>96308</td>
+ </tr>
+ <tr>
+ <td>Cyrus</td>
+ <td class="name">Parker</td>
+ <td>Dixon</td>
+ <td>Belgium</td>
+ <td class="email">imperdiet@ornare.edu</td>
+ <td>May 13, 2012</td>
+ <td>52863</td>
+ </tr>
+ <tr>
+ <td>Drake</td>
+ <td class="name">Rhodes</td>
+ <td>Moultrie</td>
+ <td>American Samoa</td>
+ <td class="email">enim@pedeCras.edu</td>
+ <td>Jun 23, 2012</td>
+ <td>74539</td>
+ </tr>
+ <tr>
+ <td>Germaine</td>
+ <td class="name">Castro</td>
+ <td>Richland</td>
+ <td>Liechtenstein</td>
+ <td class="email">pede.Cras.vulputate@porttitorerosnec.com</td>
+ <td>Dec 28, 2011</td>
+ <td>63845</td>
+ </tr>
+ <tr>
+ <td>Destiny</td>
+ <td class="name">Pickett</td>
+ <td>Forest Lake</td>
+ <td>Libyan Arab Jamahiriya</td>
+ <td class="email">luctus.felis.purus@egestas.ca</td>
+ <td>Oct 25, 2012</td>
+ <td>19834</td>
+ </tr>
+ <tr>
+ <td>Lars</td>
+ <td class="name">Bishop</td>
+ <td>Sun Valley</td>
+ <td>Cayman Islands</td>
+ <td class="email">risus@at.org</td>
+ <td>Nov 22, 2012</td>
+ <td>51458</td>
+ </tr>
+ <tr>
+ <td>Irma</td>
+ <td class="name">Barton</td>
+ <td>New Madrid</td>
+ <td>Christmas Island</td>
+ <td class="email">vitae.semper@pede.org</td>
+ <td>Apr 5, 2011</td>
+ <td>55391</td>
+ </tr>
+ <tr>
+ <td>Uriah</td>
+ <td class="name">Wilkerson</td>
+ <td>Des Moines</td>
+ <td>Cuba</td>
+ <td class="email">a.scelerisque@auguemalesuadamalesuada.edu</td>
+ <td>Aug 2, 2011</td>
+ <td>56456</td>
+ </tr>
+ <tr>
+ <td>Meredith</td>
+ <td class="name">Perkins</td>
+ <td>Morgantown</td>
+ <td>Mali</td>
+ <td class="email">sem.magna.nec@utmolestie.com</td>
+ <td>Jul 7, 2012</td>
+ <td>20346</td>
+ </tr>
+ <tr>
+ <td>Meredith</td>
+ <td class="name">Shaw</td>
+ <td>Chicago Heights</td>
+ <td>Faroe Islands</td>
+ <td class="email">urna@tinciduntvehicularisus.edu</td>
+ <td>Oct 14, 2011</td>
+ <td>45907</td>
+ </tr>
+ <tr>
+ <td>Kendall</td>
+ <td class="name">West</td>
+ <td>Hartford</td>
+ <td>San Marino</td>
+ <td class="email">lacus@nisisemsemper.com</td>
+ <td>Nov 5, 2011</td>
+ <td>95793</td>
+ </tr>
+ <tr>
+ <td>Ignacia</td>
+ <td class="name">Benton</td>
+ <td>Oxford</td>
+ <td>Albania</td>
+ <td class="email">augue.malesuada@Etiamvestibulummassa.ca</td>
+ <td>Dec 22, 2011</td>
+ <td>16838</td>
+ </tr>
+ <tr>
+ <td>Buffy</td>
+ <td class="name">Holder</td>
+ <td>Uniontown</td>
+ <td>France</td>
+ <td class="email">lacus.Cras.interdum@Suspendisse.ca</td>
+ <td>Dec 26, 2011</td>
+ <td>14356</td>
+ </tr>
+ <tr>
+ <td>Robert</td>
+ <td class="name">Knight</td>
+ <td>Alameda</td>
+ <td>Chile</td>
+ <td class="email">tempor@interdum.edu</td>
+ <td>Aug 24, 2012</td>
+ <td>47454</td>
+ </tr>
+ <tr>
+ <td>Alyssa</td>
+ <td class="name">Lane</td>
+ <td>Lansing</td>
+ <td>Poland</td>
+ <td class="email">iaculis.odio@pede.edu</td>
+ <td>Oct 17, 2012</td>
+ <td>13091</td>
+ </tr>
+ <tr>
+ <td>Eaton</td>
+ <td class="name">Dominguez</td>
+ <td>Laconia</td>
+ <td>Cocos (Keeling) Islands</td>
+ <td class="email">interdum.Curabitur@Cras.org</td>
+ <td>Mar 6, 2012</td>
+ <td>19370</td>
+ </tr>
+ <tr>
+ <td>Lionel</td>
+ <td class="name">Henry</td>
+ <td>New Bedford</td>
+ <td>Nauru</td>
+ <td class="email">lectus.pede@nullaDonecnon.ca</td>
+ <td>Feb 1, 2012</td>
+ <td>91015</td>
+ </tr>
+ <tr>
+ <td>Alexa</td>
+ <td class="name">Alvarado</td>
+ <td>Irving</td>
+ <td>Lithuania</td>
+ <td class="email">ipsum.Suspendisse.non@laoreetposuere.edu</td>
+ <td>Aug 29, 2011</td>
+ <td>72668</td>
+ </tr>
+ <tr>
+ <td>Alfonso</td>
+ <td class="name">Holcomb</td>
+ <td>Washington</td>
+ <td>Liberia</td>
+ <td class="email">tellus.Aenean@SuspendissesagittisNullam.edu</td>
+ <td>Sep 9, 2012</td>
+ <td>35378</td>
+ </tr>
+ <tr>
+ <td>Simone</td>
+ <td class="name">Morin</td>
+ <td>Pembroke Pines</td>
+ <td>Kuwait</td>
+ <td class="email">arcu@orciPhasellus.ca</td>
+ <td>Jun 4, 2012</td>
+ <td>40163</td>
+ </tr>
+ <tr>
+ <td>Winifred</td>
+ <td class="name">Valencia</td>
+ <td>Grand Rapids</td>
+ <td>Guyana</td>
+ <td class="email">a.neque@lacus.edu</td>
+ <td>Jun 13, 2011</td>
+ <td>52119</td>
+ </tr>
+ <tr>
+ <td>Nigel</td>
+ <td class="name">Brady</td>
+ <td>Torrance</td>
+ <td>Nigeria</td>
+ <td class="email">nascetur.ridiculus@Morbi.com</td>
+ <td>Sep 4, 2012</td>
+ <td>25328</td>
+ </tr>
+ <tr>
+ <td>Knox</td>
+ <td class="name">Cantu</td>
+ <td>Savannah</td>
+ <td>Dominican Republic</td>
+ <td class="email">fames.ac@necimperdiet.edu</td>
+ <td>Oct 23, 2012</td>
+ <td>47569</td>
+ </tr>
+ <tr>
+ <td>Ezekiel</td>
+ <td class="name">Bowers</td>
+ <td>Georgetown</td>
+ <td>Northern Mariana Islands</td>
+ <td class="email">nulla.vulputate@ipsumdolorsit.ca</td>
+ <td>Nov 9, 2012</td>
+ <td>81979</td>
+ </tr>
+ <tr>
+ <td>Deanna</td>
+ <td class="name">Irwin</td>
+ <td>Toledo</td>
+ <td>Cambodia</td>
+ <td class="email">neque@semconsequatnec.ca</td>
+ <td>Jul 7, 2011</td>
+ <td>95674</td>
+ </tr>
+ <tr>
+ <td>Hoyt</td>
+ <td class="name">Fuentes</td>
+ <td>Bloomington</td>
+ <td>Cyprus</td>
+ <td class="email">orci.Ut@nibh.org</td>
+ <td>Oct 25, 2012</td>
+ <td>48163</td>
+ </tr>
+ <tr>
+ <td>Kamal</td>
+ <td class="name">Yates</td>
+ <td>Los Angeles</td>
+ <td>Suriname</td>
+ <td class="email">vitae.aliquet@Namporttitor.ca</td>
+ <td>Apr 9, 2011</td>
+ <td>41892</td>
+ </tr>
+ <tr>
+ <td>Charlotte</td>
+ <td class="name">Alexander</td>
+ <td>Seaford</td>
+ <td>Belarus</td>
+ <td class="email">felis@elita.edu</td>
+ <td>Aug 10, 2011</td>
+ <td>39729</td>
+ </tr>
+ <tr>
+ <td>Rana</td>
+ <td class="name">Mcdonald</td>
+ <td>Norwich</td>
+ <td>Tanzania, United Republic of</td>
+ <td class="email">eu.elit.Nulla@egetodio.com</td>
+ <td>Apr 28, 2012</td>
+ <td>34045</td>
+ </tr>
+ <tr>
+ <td>Kennedy</td>
+ <td class="name">Santiago</td>
+ <td>El Cerrito</td>
+ <td>Aruba</td>
+ <td class="email">risus.Nunc@eget.com</td>
+ <td>Sep 25, 2012</td>
+ <td>80367</td>
+ </tr>
+ <tr>
+ <td>Lois</td>
+ <td class="name">Kelly</td>
+ <td>San Francisco</td>
+ <td>Ireland</td>
+ <td class="email">feugiat.non@aenim.ca</td>
+ <td>Nov 15, 2011</td>
+ <td>58415</td>
+ </tr>
+ <tr>
+ <td>Jenna</td>
+ <td class="name">Manning</td>
+ <td>Cambridge</td>
+ <td>Bouvet Island</td>
+ <td class="email">nonummy.ac@gravidanon.edu</td>
+ <td>Oct 11, 2011</td>
+ <td>67687</td>
+ </tr>
+ <tr>
+ <td>Eden</td>
+ <td class="name">Mckee</td>
+ <td>Kokomo</td>
+ <td>Marshall Islands</td>
+ <td class="email">Aliquam.vulputate@quamCurabitur.com</td>
+ <td>Aug 7, 2011</td>
+ <td>79335</td>
+ </tr>
+ <tr>
+ <td>Jael</td>
+ <td class="name">William</td>
+ <td>El Cerrito</td>
+ <td>Dominican Republic</td>
+ <td class="email">ut.aliquam@tellus.ca</td>
+ <td>Jun 9, 2011</td>
+ <td>97577</td>
+ </tr>
+ <tr>
+ <td>Emma</td>
+ <td class="name">Hughes</td>
+ <td>Marlborough</td>
+ <td>Israel</td>
+ <td class="email">mi.Aliquam@nuncQuisque.ca</td>
+ <td>Nov 3, 2011</td>
+ <td>49415</td>
+ </tr>
+ <tr>
+ <td>Kirsten</td>
+ <td class="name">Estes</td>
+ <td>Astoria</td>
+ <td>Algeria</td>
+ <td class="email">Nunc.commodo.auctor@orci.com</td>
+ <td>Apr 8, 2012</td>
+ <td>54645</td>
+ </tr>
+ <tr>
+ <td>Anjolie</td>
+ <td class="name">Sargent</td>
+ <td>Laguna Beach</td>
+ <td>Gambia</td>
+ <td class="email">metus@luctus.org</td>
+ <td>Feb 15, 2011</td>
+ <td>22452</td>
+ </tr>
+ <tr>
+ <td>Dale</td>
+ <td class="name">Wall</td>
+ <td>Murray</td>
+ <td>Samoa</td>
+ <td class="email">vulputate.eu@congueInscelerisque.edu</td>
+ <td>Nov 17, 2012</td>
+ <td>74859</td>
+ </tr>
+ <tr>
+ <td>Chaim</td>
+ <td class="name">Morin</td>
+ <td>Yonkers</td>
+ <td>Costa Rica</td>
+ <td class="email">a.nunc@sitametconsectetuer.edu</td>
+ <td>Oct 4, 2012</td>
+ <td>33924</td>
+ </tr>
+ <tr>
+ <td>Dylan</td>
+ <td class="name">Casey</td>
+ <td>Bethlehem</td>
+ <td>Saint Lucia</td>
+ <td class="email">cursus.luctus@velfaucibus.com</td>
+ <td>Oct 23, 2011</td>
+ <td>33073</td>
+ </tr>
+ <tr>
+ <td>Quincy</td>
+ <td class="name">Morales</td>
+ <td>Commerce</td>
+ <td>Guatemala</td>
+ <td class="email">blandit.mattis@Donecest.com</td>
+ <td>Aug 7, 2012</td>
+ <td>66255</td>
+ </tr>
+ <tr>
+ <td>Simon</td>
+ <td class="name">James</td>
+ <td>Elko</td>
+ <td>Sweden</td>
+ <td class="email">ac.mattis.ornare@ligulaeu.org</td>
+ <td>Jan 14, 2011</td>
+ <td>78769</td>
+ </tr>
+ <tr>
+ <td>Shoshana</td>
+ <td class="name">Wooten</td>
+ <td>Valdosta</td>
+ <td>United Kingdom</td>
+ <td class="email">Maecenas.malesuada.fringilla@iaculis.edu</td>
+ <td>Dec 4, 2011</td>
+ <td>54634</td>
+ </tr>
+ <tr>
+ <td>Macey</td>
+ <td class="name">Rogers</td>
+ <td>Carbondale</td>
+ <td>Solomon Islands</td>
+ <td class="email">iaculis@tortorNunc.org</td>
+ <td>Jan 17, 2012</td>
+ <td>69135</td>
+ </tr>
+ <tr>
+ <td>Ezra</td>
+ <td class="name">Logan</td>
+ <td>Calumet City</td>
+ <td>Monaco</td>
+ <td class="email">at.pede@Phasellusdapibus.com</td>
+ <td>Nov 26, 2011</td>
+ <td>29331</td>
+ </tr>
+ <tr>
+ <td>Rylee</td>
+ <td class="name">Dyer</td>
+ <td>Council Bluffs</td>
+ <td>Saint Helena</td>
+ <td class="email">nibh@Aliquam.com</td>
+ <td>Dec 23, 2011</td>
+ <td>23793</td>
+ </tr>
+ <tr>
+ <td>Raven</td>
+ <td class="name">Velazquez</td>
+ <td>Washington</td>
+ <td>Tuvalu</td>
+ <td class="email">nec.orci.Donec@egestasAliquam.ca</td>
+ <td>Jan 12, 2012</td>
+ <td>22906</td>
+ </tr>
+ <tr>
+ <td>Plato</td>
+ <td class="name">Boyer</td>
+ <td>Pasco</td>
+ <td>Timor-leste</td>
+ <td class="email">semper.cursus.Integer@ataugueid.edu</td>
+ <td>Mar 13, 2011</td>
+ <td>19451</td>
+ </tr>
+ <tr>
+ <td>Hayley</td>
+ <td class="name">Wheeler</td>
+ <td>Hampton</td>
+ <td>Morocco</td>
+ <td class="email">tempor.arcu.Vestibulum@Donecelementum.ca</td>
+ <td>Nov 14, 2011</td>
+ <td>86373</td>
+ </tr>
+ <tr>
+ <td>Zane</td>
+ <td class="name">Morgan</td>
+ <td>Saint Joseph</td>
+ <td>Ukraine</td>
+ <td class="email">sit.amet@convallis.org</td>
+ <td>Feb 19, 2012</td>
+ <td>81948</td>
+ </tr>
+ <tr>
+ <td>Cassandra</td>
+ <td class="name">Guerrero</td>
+ <td>Thibodaux</td>
+ <td>Sweden</td>
+ <td class="email">magna@nuncullamcorpereu.org</td>
+ <td>Apr 14, 2011</td>
+ <td>16254</td>
+ </tr>
+ <tr>
+ <td>April</td>
+ <td class="name">Cabrera</td>
+ <td>Ardmore</td>
+ <td>Ireland</td>
+ <td class="email">posuere.cubilia.Curae;@nostraperinceptos.org</td>
+ <td>Nov 28, 2011</td>
+ <td>86589</td>
+ </tr>
+ <tr>
+ <td>Branden</td>
+ <td class="name">Maddox</td>
+ <td>Leominster</td>
+ <td>Tokelau</td>
+ <td class="email">vitae.orci@ultricessit.edu</td>
+ <td>May 26, 2011</td>
+ <td>11319</td>
+ </tr>
+ <tr>
+ <td>Eugenia</td>
+ <td class="name">Duke</td>
+ <td>Hialeah</td>
+ <td>Colombia</td>
+ <td class="email">iaculis@ascelerisquesed.org</td>
+ <td>May 12, 2012</td>
+ <td>54556</td>
+ </tr>
+ <tr>
+ <td>Boris</td>
+ <td class="name">Mullen</td>
+ <td>Newburgh</td>
+ <td>Burkina Faso</td>
+ <td class="email">dignissim@nequeNullamut.org</td>
+ <td>Dec 9, 2011</td>
+ <td>49827</td>
+ </tr>
+ <tr>
+ <td>Urielle</td>
+ <td class="name">Pollard</td>
+ <td>Yuma</td>
+ <td>Iran, Islamic Republic of</td>
+ <td class="email">tellus.Aenean@vestibulummassa.ca</td>
+ <td>Nov 8, 2012</td>
+ <td>60607</td>
+ </tr>
+ <tr>
+ <td>Althea</td>
+ <td class="name">Foley</td>
+ <td>Scottsbluff</td>
+ <td>Iraq</td>
+ <td class="email">ac.mattis@eget.ca</td>
+ <td>Jun 3, 2012</td>
+ <td>69002</td>
+ </tr>
+ <tr>
+ <td>Paula</td>
+ <td class="name">Booker</td>
+ <td>Frankfort</td>
+ <td>Guinea-bissau</td>
+ <td class="email">Nullam@Aliquamnecenim.com</td>
+ <td>Jan 10, 2012</td>
+ <td>40317</td>
+ </tr>
+ <tr>
+ <td>Kessie</td>
+ <td class="name">Harmon</td>
+ <td>Beaumont</td>
+ <td>Mali</td>
+ <td class="email">commodo.auctor.velit@sapien.org</td>
+ <td>Apr 21, 2012</td>
+ <td>11691</td>
+ </tr>
+ <tr>
+ <td>Shaine</td>
+ <td class="name">Randolph</td>
+ <td>Fullerton</td>
+ <td>Norway</td>
+ <td class="email">purus@Phasellusornare.edu</td>
+ <td>Aug 22, 2011</td>
+ <td>60811</td>
+ </tr>
+ <tr>
+ <td>Tamekah</td>
+ <td class="name">Salinas</td>
+ <td>Norwich</td>
+ <td>Colombia</td>
+ <td class="email">Nulla@ametluctus.ca</td>
+ <td>Oct 11, 2012</td>
+ <td>14711</td>
+ </tr>
+ <tr>
+ <td>Dante</td>
+ <td class="name">Lang</td>
+ <td>Kankakee</td>
+ <td>French Polynesia</td>
+ <td class="email">Cras@nisiAeneaneget.org</td>
+ <td>Apr 14, 2012</td>
+ <td>73657</td>
+ </tr>
+ <tr>
+ <td>Blair</td>
+ <td class="name">Hamilton</td>
+ <td>Kona</td>
+ <td>Ireland</td>
+ <td class="email">faucibus@tempus.ca</td>
+ <td>Jan 2, 2012</td>
+ <td>36851</td>
+ </tr>
+ <tr>
+ <td>Ciaran</td>
+ <td class="name">Ray</td>
+ <td>Bridgeport</td>
+ <td>Swaziland</td>
+ <td class="email">nibh.Aliquam.ornare@nullaanteiaculis.edu</td>
+ <td>Mar 1, 2012</td>
+ <td>72915</td>
+ </tr>
+ <tr>
+ <td>Lester</td>
+ <td class="name">Holcomb</td>
+ <td>Danbury</td>
+ <td>Antigua and Barbuda</td>
+ <td class="email">Donec.egestas.Duis@Curae;.com</td>
+ <td>Jun 7, 2012</td>
+ <td>83293</td>
+ </tr>
+ <tr>
+ <td>Iris</td>
+ <td class="name">Jenkins</td>
+ <td>Concord</td>
+ <td>Tonga</td>
+ <td class="email">mollis.Duis.sit@semperNam.ca</td>
+ <td>Jan 15, 2011</td>
+ <td>45170</td>
+ </tr>
+ <tr>
+ <td>India</td>
+ <td class="name">Blackburn</td>
+ <td>Cedar Falls</td>
+ <td>Mali</td>
+ <td class="email">arcu.Vivamus.sit@magnisdisparturient.org</td>
+ <td>May 30, 2011</td>
+ <td>11844</td>
+ </tr>
+ <tr>
+ <td>Gemma</td>
+ <td class="name">Decker</td>
+ <td>Ketchikan</td>
+ <td>Mayotte</td>
+ <td class="email">Curabitur@luctusCurabituregestas.ca</td>
+ <td>Aug 19, 2012</td>
+ <td>28846</td>
+ </tr>
+ <tr>
+ <td>Graham</td>
+ <td class="name">Green</td>
+ <td>Pascagoula</td>
+ <td>Martinique</td>
+ <td class="email">id@ametconsectetueradipiscing.org</td>
+ <td>Sep 7, 2012</td>
+ <td>69740</td>
+ </tr>
+ <tr>
+ <td>Cedric</td>
+ <td class="name">Carlson</td>
+ <td>Rapid City</td>
+ <td>Gambia</td>
+ <td class="email">pede.nec.ante@sitamet.com</td>
+ <td>Feb 18, 2012</td>
+ <td>14817</td>
+ </tr>
+ <tr>
+ <td>Kellie</td>
+ <td class="name">Mullen</td>
+ <td>Fairmont</td>
+ <td>Western Sahara</td>
+ <td class="email">sed@dapibus.edu</td>
+ <td>Jun 15, 2012</td>
+ <td>18378</td>
+ </tr>
+ <tr>
+ <td>Dominic</td>
+ <td class="name">Humphrey</td>
+ <td>Kingston</td>
+ <td>Uruguay</td>
+ <td class="email">quis@Quisqueimperdiet.com</td>
+ <td>Dec 5, 2012</td>
+ <td>32145</td>
+ </tr>
+ <tr>
+ <td>Jason</td>
+ <td class="name">Noel</td>
+ <td>Hoboken</td>
+ <td>Congo</td>
+ <td class="email">neque.Nullam.ut@asollicitudinorci.org</td>
+ <td>Jun 17, 2012</td>
+ <td>25643</td>
+ </tr>
+ <tr>
+ <td>Jana</td>
+ <td class="name">Burke</td>
+ <td>Sharon</td>
+ <td>Saint Kitts and Nevis</td>
+ <td class="email">sapien@Morbi.edu</td>
+ <td>Jan 14, 2011</td>
+ <td>45295</td>
+ </tr>
+ <tr>
+ <td>Griffith</td>
+ <td class="name">Hahn</td>
+ <td>Spartanburg</td>
+ <td>South Africa</td>
+ <td class="email">vel@egestasblandit.org</td>
+ <td>Oct 6, 2011</td>
+ <td>12676</td>
+ </tr>
+ <tr>
+ <td>Blaine</td>
+ <td class="name">Callahan</td>
+ <td>Pittsfield</td>
+ <td>Libyan Arab Jamahiriya</td>
+ <td class="email">lobortis.ultrices@nonummyut.edu</td>
+ <td>Jan 2, 2012</td>
+ <td>23984</td>
+ </tr>
+ <tr>
+ <td>Hanna</td>
+ <td class="name">Marshall</td>
+ <td>Erie</td>
+ <td>Cook Islands</td>
+ <td class="email">dapibus@justo.org</td>
+ <td>Mar 7, 2011</td>
+ <td>42188</td>
+ </tr>
+ <tr>
+ <td>Zoe</td>
+ <td class="name">Armstrong</td>
+ <td>Raleigh</td>
+ <td>Swaziland</td>
+ <td class="email">orci.Phasellus.dapibus@MaurisnullaInteger.ca</td>
+ <td>Jul 22, 2011</td>
+ <td>44114</td>
+ </tr>
+ <tr>
+ <td>Hilda</td>
+ <td class="name">Avery</td>
+ <td>Lowell</td>
+ <td>Bhutan</td>
+ <td class="email">Aliquam.fringilla@Innecorci.edu</td>
+ <td>Oct 11, 2011</td>
+ <td>91133</td>
+ </tr>
+ <tr>
+ <td>Daryl</td>
+ <td class="name">Hoover</td>
+ <td>La Puente</td>
+ <td>Macedonia</td>
+ <td class="email">ligula.tortor@lectussitamet.com</td>
+ <td>Dec 19, 2011</td>
+ <td>59209</td>
+ </tr>
+ <tr>
+ <td>Dennis</td>
+ <td class="name">Hammond</td>
+ <td>Midwest City</td>
+ <td>Yemen</td>
+ <td class="email">urna@Nunc.ca</td>
+ <td>Oct 30, 2011</td>
+ <td>97193</td>
+ </tr>
+ <tr>
+ <td>Ferdinand</td>
+ <td class="name">Cline</td>
+ <td>Yorba Linda</td>
+ <td>Sri Lanka</td>
+ <td class="email">blandit@odioNaminterdum.org</td>
+ <td>May 12, 2011</td>
+ <td>77321</td>
+ </tr>
+ <tr>
+ <td>Zachery</td>
+ <td class="name">Skinner</td>
+ <td>Columbus</td>
+ <td>Kazakhstan</td>
+ <td class="email">ut.aliquam@nostra.org</td>
+ <td>Apr 29, 2011</td>
+ <td>64882</td>
+ </tr>
+ <tr>
+ <td>Ronan</td>
+ <td class="name">Young</td>
+ <td>Wynne</td>
+ <td>Haiti</td>
+ <td class="email">eget.lacus.Mauris@Fuscedolorquam.edu</td>
+ <td>Feb 6, 2011</td>
+ <td>60565</td>
+ </tr>
+ <tr>
+ <td>Adam</td>
+ <td class="name">Jimenez</td>
+ <td>Reedsport</td>
+ <td>Afghanistan</td>
+ <td class="email">Quisque@purusaccumsan.edu</td>
+ <td>Jul 24, 2011</td>
+ <td>20839</td>
+ </tr>
+ <tr>
+ <td>Patricia</td>
+ <td class="name">Bridges</td>
+ <td>Wichita</td>
+ <td>United Arab Emirates</td>
+ <td class="email">rhoncus.Nullam@venenatisamagna.org</td>
+ <td>Jun 4, 2012</td>
+ <td>55918</td>
+ </tr>
+ <tr>
+ <td>Hayfa</td>
+ <td class="name">Hicks</td>
+ <td>Long Beach</td>
+ <td>Haiti</td>
+ <td class="email">nec.luctus.felis@maurissapien.org</td>
+ <td>Sep 23, 2012</td>
+ <td>77954</td>
+ </tr>
+ <tr>
+ <td>Cain</td>
+ <td class="name">Lott</td>
+ <td>Detroit</td>
+ <td>Togo</td>
+ <td class="email">ante.iaculis@dapibusquamquis.org</td>
+ <td>Oct 14, 2011</td>
+ <td>12719</td>
+ </tr>
+ <tr>
+ <td>Chandler</td>
+ <td class="name">Fernandez</td>
+ <td>Camden</td>
+ <td>Cambodia</td>
+ <td class="email">mus@sitamet.com</td>
+ <td>May 10, 2012</td>
+ <td>19072</td>
+ </tr>
+ <tr>
+ <td>Josiah</td>
+ <td class="name">Small</td>
+ <td>Macon</td>
+ <td>Albania</td>
+ <td class="email">adipiscing@feugiattellus.ca</td>
+ <td>Jul 27, 2012</td>
+ <td>13477</td>
+ </tr>
+ <tr>
+ <td>Leila</td>
+ <td class="name">Bates</td>
+ <td>Montpelier</td>
+ <td>Somalia</td>
+ <td class="email">metus.sit.amet@acturpis.edu</td>
+ <td>Nov 28, 2012</td>
+ <td>90708</td>
+ </tr>
+ <tr>
+ <td>Sydney</td>
+ <td class="name">Grimes</td>
+ <td>Cleveland</td>
+ <td>American Samoa</td>
+ <td class="email">aliquet.Proin@urnaetarcu.com</td>
+ <td>Jan 20, 2012</td>
+ <td>24356</td>
+ </tr>
+ <tr>
+ <td>Boris</td>
+ <td class="name">Stuart</td>
+ <td>Alhambra</td>
+ <td>New Zealand</td>
+ <td class="email">posuere.at.velit@malesuadafringillaest.edu</td>
+ <td>Jan 16, 2011</td>
+ <td>87257</td>
+ </tr>
+ <tr>
+ <td>Ina</td>
+ <td class="name">Newman</td>
+ <td>Tuscaloosa</td>
+ <td>Algeria</td>
+ <td class="email">erat.neque@pede.org</td>
+ <td>May 18, 2012</td>
+ <td>39232</td>
+ </tr>
+ <tr>
+ <td>Otto</td>
+ <td class="name">Mcbride</td>
+ <td>Pendleton</td>
+ <td>Turks and Caicos Islands</td>
+ <td class="email">eu.ligula@molestie.edu</td>
+ <td>Jul 26, 2011</td>
+ <td>72726</td>
+ </tr>
+ <tr>
+ <td>Ivana</td>
+ <td class="name">Gay</td>
+ <td>Monterey Park</td>
+ <td>Kiribati</td>
+ <td class="email">dui.Fusce.aliquam@utdolordapibus.ca</td>
+ <td>Jul 7, 2012</td>
+ <td>80598</td>
+ </tr>
+ <tr>
+ <td>Rajah</td>
+ <td class="name">Fitzpatrick</td>
+ <td>Kennesaw</td>
+ <td>Panama</td>
+ <td class="email">mattis@esttempor.ca</td>
+ <td>Jun 15, 2011</td>
+ <td>30196</td>
+ </tr>
+ <tr>
+ <td>Quincy</td>
+ <td class="name">Klein</td>
+ <td>Santa Ana</td>
+ <td>Kiribati</td>
+ <td class="email">eu.turpis@Curae;Donectincidunt.org</td>
+ <td>Feb 8, 2011</td>
+ <td>89951</td>
+ </tr>
+ <tr>
+ <td>Ina</td>
+ <td class="name">Cabrera</td>
+ <td>Davis</td>
+ <td>Algeria</td>
+ <td class="email">sem.Nulla@sitamet.edu</td>
+ <td>Jun 13, 2012</td>
+ <td>40568</td>
+ </tr>
+ <tr>
+ <td>Autumn</td>
+ <td class="name">Summers</td>
+ <td>Niagara Falls</td>
+ <td>Malawi</td>
+ <td class="email">adipiscing.fringilla@Aliquamnec.com</td>
+ <td>Apr 24, 2011</td>
+ <td>30348</td>
+ </tr>
+ <tr>
+ <td>Fleur</td>
+ <td class="name">Carlson</td>
+ <td>Radford</td>
+ <td>British Indian Ocean Territory</td>
+ <td class="email">vitae.aliquam@velsapien.ca</td>
+ <td>Nov 9, 2011</td>
+ <td>28323</td>
+ </tr>
+ <tr>
+ <td>Cara</td>
+ <td class="name">Fuentes</td>
+ <td>Gettysburg</td>
+ <td>Haiti</td>
+ <td class="email">Aliquam@ultriciesornare.edu</td>
+ <td>Nov 17, 2011</td>
+ <td>70564</td>
+ </tr>
+ <tr>
+ <td>Caldwell</td>
+ <td class="name">Foley</td>
+ <td>Miami Beach</td>
+ <td>Saudi Arabia</td>
+ <td class="email">vitae.odio.sagittis@molestieorcitincidunt.edu</td>
+ <td>Dec 9, 2011</td>
+ <td>17992</td>
+ </tr>
+ <tr>
+ <td>Kamal</td>
+ <td class="name">Madden</td>
+ <td>Diamond Bar</td>
+ <td>Dominica</td>
+ <td class="email">lorem.Donec.elementum@mipede.edu</td>
+ <td>Jul 8, 2011</td>
+ <td>35318</td>
+ </tr>
+ <tr>
+ <td>Holly</td>
+ <td class="name">Elliott</td>
+ <td>Myrtle Beach</td>
+ <td>Rwanda</td>
+ <td class="email">lectus.ante@ligulaAenean.org</td>
+ <td>Feb 19, 2012</td>
+ <td>89319</td>
+ </tr>
+ <tr>
+ <td>Sydney</td>
+ <td class="name">Stout</td>
+ <td>Clovis</td>
+ <td>Japan</td>
+ <td class="email">Integer.aliquam@aceleifend.com</td>
+ <td>Sep 11, 2011</td>
+ <td>82267</td>
+ </tr>
+ <tr>
+ <td>Jakeem</td>
+ <td class="name">Russell</td>
+ <td>Guayanilla</td>
+ <td>Papua New Guinea</td>
+ <td class="email">egestas@odiovel.edu</td>
+ <td>Feb 4, 2011</td>
+ <td>66862</td>
+ </tr>
+ <tr>
+ <td>Odette</td>
+ <td class="name">Munoz</td>
+ <td>Tonawanda</td>
+ <td>Gambia</td>
+ <td class="email">nulla.ante@Phasellus.ca</td>
+ <td>Mar 11, 2011</td>
+ <td>98220</td>
+ </tr>
+ <tr>
+ <td>Virginia</td>
+ <td class="name">Montgomery</td>
+ <td>Stamford</td>
+ <td>Bouvet Island</td>
+ <td class="email">sociis@parturient.ca</td>
+ <td>Apr 27, 2011</td>
+ <td>47952</td>
+ </tr>
+ <tr>
+ <td>Jack</td>
+ <td class="name">Glass</td>
+ <td>Decatur</td>
+ <td>Solomon Islands</td>
+ <td class="email">sapien@malesuadaIntegerid.org</td>
+ <td>Jan 8, 2012</td>
+ <td>18843</td>
+ </tr>
+ <tr>
+ <td>Cherokee</td>
+ <td class="name">Holloway</td>
+ <td>Riverton</td>
+ <td>Belgium</td>
+ <td class="email">leo.elementum.sem@sitamet.edu</td>
+ <td>Apr 19, 2011</td>
+ <td>44159</td>
+ </tr>
+ <tr>
+ <td>Yuli</td>
+ <td class="name">Carter</td>
+ <td>Aliquippa</td>
+ <td>Suriname</td>
+ <td class="email">eget@Nullatincidunt.org</td>
+ <td>Nov 17, 2011</td>
+ <td>32012</td>
+ </tr>
+ <tr>
+ <td>Rylee</td>
+ <td class="name">Coleman</td>
+ <td>Morgantown</td>
+ <td>Aruba</td>
+ <td class="email">eget.tincidunt.dui@et.edu</td>
+ <td>Nov 25, 2011</td>
+ <td>12895</td>
+ </tr>
+ <tr>
+ <td>Walter</td>
+ <td class="name">Guzman</td>
+ <td>La Verne</td>
+ <td>Philippines</td>
+ <td class="email">urna.suscipit@metusInnec.edu</td>
+ <td>Dec 20, 2012</td>
+ <td>15512</td>
+ </tr>
+ <tr>
+ <td>Jayme</td>
+ <td class="name">Cotton</td>
+ <td>Cypress</td>
+ <td>Latvia</td>
+ <td class="email">Aenean@faucibuslectus.ca</td>
+ <td>Apr 22, 2012</td>
+ <td>37823</td>
+ </tr>
+ <tr>
+ <td>Maryam</td>
+ <td class="name">Patton</td>
+ <td>Liberal</td>
+ <td>Djibouti</td>
+ <td class="email">dui.lectus.rutrum@IntegermollisInteger.com</td>
+ <td>Jul 20, 2011</td>
+ <td>13823</td>
+ </tr>
+ <tr>
+ <td>Bo</td>
+ <td class="name">Fisher</td>
+ <td>Iowa City</td>
+ <td>Moldova</td>
+ <td class="email">commodo.tincidunt.nibh@augueeutempor.ca</td>
+ <td>Feb 20, 2011</td>
+ <td>12010</td>
+ </tr>
+ <tr>
+ <td>Teegan</td>
+ <td class="name">Holmes</td>
+ <td>Delta Junction</td>
+ <td>Botswana</td>
+ <td class="email">vehicula.Pellentesque.tincidunt@estac.org</td>
+ <td>May 10, 2011</td>
+ <td>53872</td>
+ </tr>
+ <tr>
+ <td>Rhona</td>
+ <td class="name">Gentry</td>
+ <td>Corinth</td>
+ <td>France</td>
+ <td class="email">ac.fermentum@nuncrisusvarius.edu</td>
+ <td>Oct 6, 2011</td>
+ <td>22170</td>
+ </tr>
+ <tr>
+ <td>Jennifer</td>
+ <td class="name">Carpenter</td>
+ <td>Janesville</td>
+ <td>Tokelau</td>
+ <td class="email">vehicula.aliquet.libero@ridiculusmusProin.com</td>
+ <td>Jan 14, 2011</td>
+ <td>76200</td>
+ </tr>
+ <tr>
+ <td>Kiara</td>
+ <td class="name">Chambers</td>
+ <td>City of Industry</td>
+ <td>Sao Tome and Principe</td>
+ <td class="email">orci@tincidunt.org</td>
+ <td>Jul 21, 2011</td>
+ <td>75843</td>
+ </tr>
+ <tr>
+ <td>Gray</td>
+ <td class="name">Hanson</td>
+ <td>Bayamon</td>
+ <td>Mauritius</td>
+ <td class="email">tempus.non.lacinia@purusin.edu</td>
+ <td>Apr 23, 2011</td>
+ <td>59870</td>
+ </tr>
+ <tr>
+ <td>Lucius</td>
+ <td class="name">Lowery</td>
+ <td>Pittsburgh</td>
+ <td>Antigua and Barbuda</td>
+ <td class="email">est.Nunc@utmolestie.ca</td>
+ <td>Nov 25, 2011</td>
+ <td>73768</td>
+ </tr>
+ <tr>
+ <td>Vivien</td>
+ <td class="name">Kennedy</td>
+ <td>Sturgis</td>
+ <td>Botswana</td>
+ <td class="email">enim@facilisis.edu</td>
+ <td>Feb 6, 2012</td>
+ <td>81110</td>
+ </tr>
+ <tr>
+ <td>Amity</td>
+ <td class="name">Hardin</td>
+ <td>Claremore</td>
+ <td>Bosnia and Herzegovina</td>
+ <td class="email">Nullam.scelerisque.neque@sodalesnisimagna.com</td>
+ <td>Jun 13, 2012</td>
+ <td>84046</td>
+ </tr>
+ <tr>
+ <td>Aladdin</td>
+ <td class="name">Walton</td>
+ <td>Hartford</td>
+ <td>Qatar</td>
+ <td class="email">ornare.elit.elit@massa.edu</td>
+ <td>Jan 21, 2012</td>
+ <td>18600</td>
+ </tr>
+ <tr>
+ <td>Buckminster</td>
+ <td class="name">Welch</td>
+ <td>Moultrie</td>
+ <td>Albania</td>
+ <td class="email">sem@Donec.edu</td>
+ <td>Sep 1, 2011</td>
+ <td>25530</td>
+ </tr>
+ <tr>
+ <td>Arthur</td>
+ <td class="name">Davidson</td>
+ <td>Miami</td>
+ <td>Dominica</td>
+ <td class="email">eu.ultrices@orci.ca</td>
+ <td>Sep 13, 2012</td>
+ <td>48935</td>
+ </tr>
+ <tr>
+ <td>Troy</td>
+ <td class="name">Wyatt</td>
+ <td>Haverhill</td>
+ <td>Faroe Islands</td>
+ <td class="email">Aliquam.rutrum.lorem@Nam.ca</td>
+ <td>Feb 11, 2012</td>
+ <td>19612</td>
+ </tr>
+ <tr>
+ <td>William</td>
+ <td class="name">Valenzuela</td>
+ <td>Bay St. Louis</td>
+ <td>Malta</td>
+ <td class="email">Aenean.massa.Integer@aneque.com</td>
+ <td>Jan 17, 2011</td>
+ <td>62300</td>
+ </tr>
+ <tr>
+ <td>Darryl</td>
+ <td class="name">Joyce</td>
+ <td>Santa Cruz</td>
+ <td>Slovakia</td>
+ <td class="email">aliquet.sem.ut@ipsum.edu</td>
+ <td>Nov 9, 2011</td>
+ <td>35416</td>
+ </tr>
+ <tr>
+ <td>Derek</td>
+ <td class="name">Carver</td>
+ <td>Escondido</td>
+ <td>New Zealand</td>
+ <td class="email">amet.consectetuer@euismodenimEtiam.ca</td>
+ <td>Jan 17, 2011</td>
+ <td>78970</td>
+ </tr>
+ <tr>
+ <td>Mannix</td>
+ <td class="name">Rutledge</td>
+ <td>Pasadena</td>
+ <td>Philippines</td>
+ <td class="email">lobortis.tellus@SuspendissesagittisNullam.org</td>
+ <td>Apr 8, 2012</td>
+ <td>32548</td>
+ </tr>
+ <tr>
+ <td>Galvin</td>
+ <td class="name">Vazquez</td>
+ <td>Rancho Cucamonga</td>
+ <td>Burundi</td>
+ <td class="email">accumsan.convallis.ante@erat.com</td>
+ <td>Sep 1, 2011</td>
+ <td>57637</td>
+ </tr>
+ <tr>
+ <td>Ferris</td>
+ <td class="name">Lynch</td>
+ <td>Parma</td>
+ <td>Morocco</td>
+ <td class="email">Sed@estcongue.org</td>
+ <td>Oct 12, 2011</td>
+ <td>48969</td>
+ </tr>
+ <tr>
+ <td>Harriet</td>
+ <td class="name">Conner</td>
+ <td>Decatur</td>
+ <td>Egypt</td>
+ <td class="email">pretium.et@Sedpharetrafelis.ca</td>
+ <td>Mar 3, 2011</td>
+ <td>12245</td>
+ </tr>
+ <tr>
+ <td>Veda</td>
+ <td class="name">Craft</td>
+ <td>Madison</td>
+ <td>Norfolk Island</td>
+ <td class="email">Duis.cursus.diam@nonlobortis.edu</td>
+ <td>May 18, 2012</td>
+ <td>78049</td>
+ </tr>
+ <tr>
+ <td>Kasimir</td>
+ <td class="name">Murphy</td>
+ <td>Brookings</td>
+ <td>Estonia</td>
+ <td class="email">augue.eu.tempor@idnunc.ca</td>
+ <td>Mar 6, 2011</td>
+ <td>66453</td>
+ </tr>
+ <tr>
+ <td>Henry</td>
+ <td class="name">Cummings</td>
+ <td>Seal Beach</td>
+ <td>Netherlands Antilles</td>
+ <td class="email">imperdiet.ornare@In.edu</td>
+ <td>Jul 19, 2012</td>
+ <td>25952</td>
+ </tr>
+ <tr>
+ <td>Dacey</td>
+ <td class="name">Ayers</td>
+ <td>Hickory</td>
+ <td>Saint Lucia</td>
+ <td class="email">molestie.pharetra.nibh@malesuadaut.edu</td>
+ <td>Mar 9, 2012</td>
+ <td>44174</td>
+ </tr>
+ <tr>
+ <td>Virginia</td>
+ <td class="name">Reese</td>
+ <td>Ashland</td>
+ <td>Australia</td>
+ <td class="email">Integer@purusinmolestie.org</td>
+ <td>May 12, 2012</td>
+ <td>75418</td>
+ </tr>
+ <tr>
+ <td>Bertha</td>
+ <td class="name">Whitehead</td>
+ <td>Washington</td>
+ <td>Tuvalu</td>
+ <td class="email">Suspendisse.eleifend@et.org</td>
+ <td>Mar 2, 2011</td>
+ <td>36257</td>
+ </tr>
+ <tr>
+ <td>Xandra</td>
+ <td class="name">Simmons</td>
+ <td>Gadsden</td>
+ <td>Grenada</td>
+ <td class="email">sit.amet@arcuSed.edu</td>
+ <td>Aug 28, 2011</td>
+ <td>88873</td>
+ </tr>
+ <tr>
+ <td>Gavin</td>
+ <td class="name">Byrd</td>
+ <td>Nogales</td>
+ <td>Haiti</td>
+ <td class="email">Donec@Integer.edu</td>
+ <td>Jan 31, 2012</td>
+ <td>77276</td>
+ </tr>
+ <tr>
+ <td>Rinah</td>
+ <td class="name">Dillard</td>
+ <td>Pomona</td>
+ <td>Saint Kitts and Nevis</td>
+ <td class="email">lectus@a.edu</td>
+ <td>Jan 20, 2011</td>
+ <td>79816</td>
+ </tr>
+ <tr>
+ <td>Maryam</td>
+ <td class="name">Bean</td>
+ <td>New Rochelle</td>
+ <td>Viet Nam</td>
+ <td class="email">non.dui@scelerisquesedsapien.edu</td>
+ <td>Jan 6, 2012</td>
+ <td>24359</td>
+ </tr>
+ <tr>
+ <td>Ulysses</td>
+ <td class="name">Lee</td>
+ <td>Fallon</td>
+ <td>Martinique</td>
+ <td class="email">enim.nec.tempus@orci.org</td>
+ <td>Jan 2, 2012</td>
+ <td>41896</td>
+ </tr>
+ <tr>
+ <td>Sebastian</td>
+ <td class="name">Grant</td>
+ <td>Murray</td>
+ <td>Marshall Islands</td>
+ <td class="email">diam@torquentperconubia.edu</td>
+ <td>Sep 29, 2012</td>
+ <td>94255</td>
+ </tr>
+ <tr>
+ <td>Amal</td>
+ <td class="name">Riggs</td>
+ <td>Wynne</td>
+ <td>Norway</td>
+ <td class="email">Mauris.eu.turpis@urnaNuncquis.com</td>
+ <td>Aug 24, 2011</td>
+ <td>15807</td>
+ </tr>
+ <tr>
+ <td>Stephanie</td>
+ <td class="name">Graham</td>
+ <td>Muncie</td>
+ <td>Canada</td>
+ <td class="email">dolor.Fusce.mi@metussit.org</td>
+ <td>Jan 28, 2011</td>
+ <td>26309</td>
+ </tr>
+ <tr>
+ <td>Jescie</td>
+ <td class="name">Holland</td>
+ <td>Mason City</td>
+ <td>Bangladesh</td>
+ <td class="email">dui.Cum.sociis@loremeumetus.ca</td>
+ <td>Apr 27, 2011</td>
+ <td>95718</td>
+ </tr>
+ <tr>
+ <td>Quinn</td>
+ <td class="name">Watkins</td>
+ <td>Powell</td>
+ <td>Saint Vincent and The Grenadines</td>
+ <td class="email">ante.lectus@est.edu</td>
+ <td>Oct 29, 2011</td>
+ <td>63038</td>
+ </tr>
+ <tr>
+ <td>Kitra</td>
+ <td class="name">Bates</td>
+ <td>Waukegan</td>
+ <td>Cambodia</td>
+ <td class="email">purus@iaculislacus.ca</td>
+ <td>Aug 23, 2012</td>
+ <td>32026</td>
+ </tr>
+ <tr>
+ <td>Aladdin</td>
+ <td class="name">Hurley</td>
+ <td>Paramount</td>
+ <td>Mauritania</td>
+ <td class="email">blandit.viverra@vitae.com</td>
+ <td>May 17, 2011</td>
+ <td>19926</td>
+ </tr>
+ <tr>
+ <td>Fitzgerald</td>
+ <td class="name">Edwards</td>
+ <td>Basin</td>
+ <td>Armenia</td>
+ <td class="email">sit@euodio.edu</td>
+ <td>Sep 16, 2011</td>
+ <td>71509</td>
+ </tr>
+ <tr>
+ <td>Quamar</td>
+ <td class="name">Pennington</td>
+ <td>Radford</td>
+ <td>Poland</td>
+ <td class="email">Cras.interdum.Nunc@atnisi.ca</td>
+ <td>Mar 29, 2012</td>
+ <td>59219</td>
+ </tr>
+ <tr>
+ <td>Preston</td>
+ <td class="name">Rowe</td>
+ <td>Alameda</td>
+ <td>Jamaica</td>
+ <td class="email">dapibus.rutrum@malesuada.ca</td>
+ <td>Jun 24, 2011</td>
+ <td>63620</td>
+ </tr>
+ <tr>
+ <td>Merritt</td>
+ <td class="name">Dennis</td>
+ <td>Stafford</td>
+ <td>Reunion</td>
+ <td class="email">adipiscing@ettristique.edu</td>
+ <td>Jan 24, 2011</td>
+ <td>60241</td>
+ </tr>
+ <tr>
+ <td>Jena</td>
+ <td class="name">Sawyer</td>
+ <td>Escondido</td>
+ <td>Congo</td>
+ <td class="email">Donec.est@Vivamus.org</td>
+ <td>Jul 11, 2011</td>
+ <td>93011</td>
+ </tr>
+ <tr>
+ <td>Marny</td>
+ <td class="name">Hess</td>
+ <td>Poughkeepsie</td>
+ <td>Niue</td>
+ <td class="email">semper.cursus.Integer@euismod.org</td>
+ <td>Sep 8, 2011</td>
+ <td>19965</td>
+ </tr>
+ <tr>
+ <td>Kiona</td>
+ <td class="name">Francis</td>
+ <td>Grand Junction</td>
+ <td>Indonesia</td>
+ <td class="email">vel@dictum.com</td>
+ <td>Jan 29, 2011</td>
+ <td>41544</td>
+ </tr>
+ <tr>
+ <td>Zelda</td>
+ <td class="name">Sykes</td>
+ <td>City of Industry</td>
+ <td>Equatorial Guinea</td>
+ <td class="email">lacinia@eudolor.ca</td>
+ <td>Jul 8, 2011</td>
+ <td>15358</td>
+ </tr>
+ <tr>
+ <td>Carla</td>
+ <td class="name">Horne</td>
+ <td>Lake Forest</td>
+ <td>Timor-leste</td>
+ <td class="email">montes@auctorullamcorpernisl.com</td>
+ <td>Jul 10, 2011</td>
+ <td>63680</td>
+ </tr>
+ <tr>
+ <td>Hilel</td>
+ <td class="name">Shelton</td>
+ <td>Truth or Consequences</td>
+ <td>Saint Lucia</td>
+ <td class="email">vulputate@anteiaculis.com</td>
+ <td>Aug 1, 2011</td>
+ <td>81858</td>
+ </tr>
+ <tr>
+ <td>Tanisha</td>
+ <td class="name">Grant</td>
+ <td>Peekskill</td>
+ <td>Bahamas</td>
+ <td class="email">amet.consectetuer@magnaCrasconvallis.edu</td>
+ <td>Sep 18, 2011</td>
+ <td>61071</td>
+ </tr>
+ <tr>
+ <td>Ayanna</td>
+ <td class="name">Cohen</td>
+ <td>Alexandria</td>
+ <td>Mauritius</td>
+ <td class="email">non@dolorQuisquetincidunt.com</td>
+ <td>Oct 1, 2012</td>
+ <td>25891</td>
+ </tr>
+ <tr>
+ <td>Madison</td>
+ <td class="name">Rutledge</td>
+ <td>Aliquippa</td>
+ <td>Malawi</td>
+ <td class="email">taciti.sociosqu@vulputateposuere.ca</td>
+ <td>Dec 14, 2011</td>
+ <td>84684</td>
+ </tr>
+ <tr>
+ <td>Orson</td>
+ <td class="name">Owens</td>
+ <td>Columbia</td>
+ <td>Ireland</td>
+ <td class="email">elit.elit.fermentum@Quisque.ca</td>
+ <td>Jun 10, 2012</td>
+ <td>30998</td>
+ </tr>
+ <tr>
+ <td>Beatrice</td>
+ <td class="name">Vang</td>
+ <td>Isle of Palms</td>
+ <td>Bhutan</td>
+ <td class="email">hendrerit.neque@erat.org</td>
+ <td>Jun 26, 2011</td>
+ <td>65410</td>
+ </tr>
+ <tr>
+ <td>Kiayada</td>
+ <td class="name">Campos</td>
+ <td>Jackson</td>
+ <td>Mauritius</td>
+ <td class="email">leo.Morbi@ametanteVivamus.ca</td>
+ <td>May 19, 2011</td>
+ <td>66304</td>
+ </tr>
+ <tr>
+ <td>Willow</td>
+ <td class="name">Moses</td>
+ <td>Gaithersburg</td>
+ <td>Burundi</td>
+ <td class="email">Integer@nonsapienmolestie.org</td>
+ <td>Feb 22, 2012</td>
+ <td>80779</td>
+ </tr>
+ <tr>
+ <td>Karyn</td>
+ <td class="name">Page</td>
+ <td>Plainfield</td>
+ <td>United Arab Emirates</td>
+ <td class="email">nec.malesuada.ut@sollicitudina.org</td>
+ <td>May 31, 2011</td>
+ <td>94335</td>
+ </tr>
+ <tr>
+ <td>Mannix</td>
+ <td class="name">Briggs</td>
+ <td>Belpre</td>
+ <td>Austria</td>
+ <td class="email">scelerisque.dui@tellus.ca</td>
+ <td>Mar 16, 2011</td>
+ <td>95369</td>
+ </tr>
+ <tr>
+ <td>Blythe</td>
+ <td class="name">Schultz</td>
+ <td>Muskogee</td>
+ <td>Israel</td>
+ <td class="email">magna.nec.quam@Aliquamtincidunt.ca</td>
+ <td>May 6, 2011</td>
+ <td>20566</td>
+ </tr>
+ <tr>
+ <td>Nita</td>
+ <td class="name">Jenkins</td>
+ <td>Scottsbluff</td>
+ <td>Indonesia</td>
+ <td class="email">dui.augue@loremeu.org</td>
+ <td>Apr 15, 2012</td>
+ <td>23854</td>
+ </tr>
+ <tr>
+ <td>Quinn</td>
+ <td class="name">Farley</td>
+ <td>Eatontown</td>
+ <td>Svalbard and Jan Mayen</td>
+ <td class="email">Nunc.ac@tristiqueac.com</td>
+ <td>Mar 27, 2011</td>
+ <td>50873</td>
+ </tr>
+ <tr>
+ <td>Fay</td>
+ <td class="name">Kramer</td>
+ <td>Evansville</td>
+ <td>Turkmenistan</td>
+ <td class="email">lorem.luctus.ut@interdumSed.edu</td>
+ <td>Mar 17, 2011</td>
+ <td>58959</td>
+ </tr>
+ <tr>
+ <td>Lane</td>
+ <td class="name">Strong</td>
+ <td>Altoona</td>
+ <td>Holy See (Vatican City State)</td>
+ <td class="email">lectus@at.com</td>
+ <td>Oct 10, 2011</td>
+ <td>68918</td>
+ </tr>
+ <tr>
+ <td>Amir</td>
+ <td class="name">Bailey</td>
+ <td>Visalia</td>
+ <td>French Guiana</td>
+ <td class="email">nostra.per.inceptos@elementum.org</td>
+ <td>Oct 3, 2012</td>
+ <td>66206</td>
+ </tr>
+ <tr>
+ <td>Trevor</td>
+ <td class="name">Watts</td>
+ <td>Carolina</td>
+ <td>Cocos (Keeling) Islands</td>
+ <td class="email">tincidunt.aliquam.arcu@euaugue.org</td>
+ <td>Mar 28, 2012</td>
+ <td>65347</td>
+ </tr>
+ <tr>
+ <td>Zia</td>
+ <td class="name">Browning</td>
+ <td>Liberal</td>
+ <td>American Samoa</td>
+ <td class="email">sem.mollis@risusDonec.org</td>
+ <td>Jan 30, 2012</td>
+ <td>73063</td>
+ </tr>
+ <tr>
+ <td>Carly</td>
+ <td class="name">Potter</td>
+ <td>Pullman</td>
+ <td>Benin</td>
+ <td class="email">tellus@aptenttaciti.edu</td>
+ <td>Jul 25, 2011</td>
+ <td>99675</td>
+ </tr>
+ <tr>
+ <td>TaShya</td>
+ <td class="name">William</td>
+ <td>Waycross</td>
+ <td>Angola</td>
+ <td class="email">a@justo.com</td>
+ <td>Feb 1, 2011</td>
+ <td>67461</td>
+ </tr>
+ <tr>
+ <td>Cruz</td>
+ <td class="name">Eaton</td>
+ <td>Rensselaer</td>
+ <td>Qatar</td>
+ <td class="email">sem@nullaIn.ca</td>
+ <td>Oct 17, 2012</td>
+ <td>27912</td>
+ </tr>
+ <tr>
+ <td>Idona</td>
+ <td class="name">Valentine</td>
+ <td>Wahoo</td>
+ <td>Cambodia</td>
+ <td class="email">odio@IntegerurnaVivamus.edu</td>
+ <td>Mar 2, 2011</td>
+ <td>83045</td>
+ </tr>
+ <tr>
+ <td>Hadassah</td>
+ <td class="name">Burks</td>
+ <td>San Bernardino</td>
+ <td>Gabon</td>
+ <td class="email">diam@mollis.org</td>
+ <td>Mar 25, 2012</td>
+ <td>45601</td>
+ </tr>
+ <tr>
+ <td>Sylvester</td>
+ <td class="name">Rogers</td>
+ <td>Olympia</td>
+ <td>New Caledonia</td>
+ <td class="email">fringilla.porttitor@ideratEtiam.org</td>
+ <td>Jan 22, 2011</td>
+ <td>66135</td>
+ </tr>
+ <tr>
+ <td>Constance</td>
+ <td class="name">Blackburn</td>
+ <td>Mayagüez</td>
+ <td>Cameroon</td>
+ <td class="email">sed@risus.ca</td>
+ <td>Sep 30, 2012</td>
+ <td>42426</td>
+ </tr>
+ <tr>
+ <td>Raphael</td>
+ <td class="name">Flowers</td>
+ <td>Lander</td>
+ <td>Mexico</td>
+ <td class="email">erat.eget@acmetus.ca</td>
+ <td>Jun 23, 2012</td>
+ <td>17684</td>
+ </tr>
+ <tr>
+ <td>Burke</td>
+ <td class="name">Ramsey</td>
+ <td>Sunbury</td>
+ <td>Singapore</td>
+ <td class="email">ornare.egestas@loremluctusut.com</td>
+ <td>Apr 25, 2012</td>
+ <td>44729</td>
+ </tr>
+ <tr>
+ <td>Stephen</td>
+ <td class="name">Meyer</td>
+ <td>La Cañada Flintridge</td>
+ <td>Indonesia</td>
+ <td class="email">dis.parturient.montes@vulputatenisisem.org</td>
+ <td>Jan 19, 2011</td>
+ <td>90023</td>
+ </tr>
+ <tr>
+ <td>Devin</td>
+ <td class="name">Holt</td>
+ <td>College Park</td>
+ <td>Saint Helena</td>
+ <td class="email">a@gravidamolestie.org</td>
+ <td>Jun 22, 2011</td>
+ <td>30701</td>
+ </tr>
+ <tr>
+ <td>Lynn</td>
+ <td class="name">Obrien</td>
+ <td>Winnemucca</td>
+ <td>Lesotho</td>
+ <td class="email">urna.Nullam@molestieintempus.org</td>
+ <td>Feb 7, 2012</td>
+ <td>34481</td>
+ </tr>
+ <tr>
+ <td>Lester</td>
+ <td class="name">Jones</td>
+ <td>Toledo</td>
+ <td>Australia</td>
+ <td class="email">sem.magna.nec@Nullamscelerisqueneque.org</td>
+ <td>Dec 31, 2012</td>
+ <td>44838</td>
+ </tr>
+ <tr>
+ <td>Paul</td>
+ <td class="name">Shepherd</td>
+ <td>Selma</td>
+ <td>Ukraine</td>
+ <td class="email">tellus.lorem@nonummyacfeugiat.com</td>
+ <td>Nov 7, 2011</td>
+ <td>34189</td>
+ </tr>
+ <tr>
+ <td>Chaim</td>
+ <td class="name">Williamson</td>
+ <td>Waycross</td>
+ <td>Cameroon</td>
+ <td class="email">non.bibendum@Proinvel.org</td>
+ <td>Mar 26, 2012</td>
+ <td>20787</td>
+ </tr>
+ <tr>
+ <td>Logan</td>
+ <td class="name">David</td>
+ <td>Nacogdoches</td>
+ <td>Liechtenstein</td>
+ <td class="email">mattis@nec.com</td>
+ <td>Sep 20, 2012</td>
+ <td>77349</td>
+ </tr>
+ <tr>
+ <td>Helen</td>
+ <td class="name">Brady</td>
+ <td>Morrison</td>
+ <td>Cuba</td>
+ <td class="email">congue@eget.edu</td>
+ <td>Feb 11, 2011</td>
+ <td>47325</td>
+ </tr>
+ <tr>
+ <td>Alea</td>
+ <td class="name">Floyd</td>
+ <td>Hollister</td>
+ <td>Virgin Islands, British</td>
+ <td class="email">fringilla.cursus@etlibero.edu</td>
+ <td>Mar 13, 2012</td>
+ <td>12323</td>
+ </tr>
+ <tr>
+ <td>Baker</td>
+ <td class="name">Rosales</td>
+ <td>East Hartford</td>
+ <td>Panama</td>
+ <td class="email">euismod@magna.org</td>
+ <td>Jul 31, 2011</td>
+ <td>57605</td>
+ </tr>
+ <tr>
+ <td>Colleen</td>
+ <td class="name">Wallace</td>
+ <td>Newburgh</td>
+ <td>Slovakia</td>
+ <td class="email">eget@euismodmauriseu.com</td>
+ <td>Dec 20, 2011</td>
+ <td>18444</td>
+ </tr>
+ <tr>
+ <td>Maggie</td>
+ <td class="name">Holcomb</td>
+ <td>Hollister</td>
+ <td>Andorra</td>
+ <td class="email">neque.non@vitaerisusDuis.ca</td>
+ <td>Jan 19, 2011</td>
+ <td>15451</td>
+ </tr>
+ <tr>
+ <td>Ryder</td>
+ <td class="name">Terry</td>
+ <td>Springfield</td>
+ <td>Bangladesh</td>
+ <td class="email">cursus.luctus@sempertellus.org</td>
+ <td>May 31, 2011</td>
+ <td>22406</td>
+ </tr>
+ <tr>
+ <td>Elizabeth</td>
+ <td class="name">Serrano</td>
+ <td>Bellflower</td>
+ <td>Turks and Caicos Islands</td>
+ <td class="email">ultrices.posuere@Donecnon.com</td>
+ <td>Jun 15, 2012</td>
+ <td>97667</td>
+ </tr>
+ <tr>
+ <td>Neville</td>
+ <td class="name">Best</td>
+ <td>Huntington Park</td>
+ <td>Belize</td>
+ <td class="email">ornare@maurisIntegersem.org</td>
+ <td>Nov 7, 2012</td>
+ <td>77231</td>
+ </tr>
+ <tr>
+ <td>Akeem</td>
+ <td class="name">Hobbs</td>
+ <td>North Pole</td>
+ <td>Tanzania, United Republic of</td>
+ <td class="email">ante.ipsum@risus.ca</td>
+ <td>Oct 24, 2011</td>
+ <td>67426</td>
+ </tr>
+ <tr>
+ <td>Dane</td>
+ <td class="name">Farrell</td>
+ <td>Lafayette</td>
+ <td>French Southern Territories</td>
+ <td class="email">Nunc@tellusid.org</td>
+ <td>Nov 14, 2012</td>
+ <td>98631</td>
+ </tr>
+ <tr>
+ <td>Otto</td>
+ <td class="name">Hernandez</td>
+ <td>Bandon</td>
+ <td>Burkina Faso</td>
+ <td class="email">mauris.rhoncus@bibendumDonecfelis.edu</td>
+ <td>Sep 10, 2011</td>
+ <td>59586</td>
+ </tr>
+ <tr>
+ <td>Chelsea</td>
+ <td class="name">Burks</td>
+ <td>Wilmington</td>
+ <td>Sri Lanka</td>
+ <td class="email">purus.in.molestie@lacus.org</td>
+ <td>Dec 2, 2012</td>
+ <td>14442</td>
+ </tr>
+ <tr>
+ <td>Maxine</td>
+ <td class="name">Sampson</td>
+ <td>Gastonia</td>
+ <td>Bouvet Island</td>
+ <td class="email">Proin@viverra.com</td>
+ <td>Jul 16, 2011</td>
+ <td>94283</td>
+ </tr>
+ <tr>
+ <td>Martha</td>
+ <td class="name">Austin</td>
+ <td>Great Falls</td>
+ <td>Philippines</td>
+ <td class="email">neque@dictumProineget.com</td>
+ <td>Aug 20, 2011</td>
+ <td>94790</td>
+ </tr>
+ <tr>
+ <td>Melodie</td>
+ <td class="name">Kelley</td>
+ <td>Baton Rouge</td>
+ <td>Niger</td>
+ <td class="email">mauris@Nam.edu</td>
+ <td>Nov 6, 2012</td>
+ <td>72120</td>
+ </tr>
+ <tr>
+ <td>Iola</td>
+ <td class="name">Phelps</td>
+ <td>Little Rock</td>
+ <td>Samoa</td>
+ <td class="email">erat.eget.tincidunt@aliquet.com</td>
+ <td>Feb 27, 2011</td>
+ <td>61857</td>
+ </tr>
+ <tr>
+ <td>Adara</td>
+ <td class="name">Vinson</td>
+ <td>Nacogdoches</td>
+ <td>Guam</td>
+ <td class="email">feugiat.Sed@sodales.ca</td>
+ <td>Jun 10, 2012</td>
+ <td>56513</td>
+ </tr>
+ <tr>
+ <td>Hyacinth</td>
+ <td class="name">Lopez</td>
+ <td>Alameda</td>
+ <td>Kyrgyzstan</td>
+ <td class="email">arcu@justoeu.org</td>
+ <td>Nov 13, 2012</td>
+ <td>64215</td>
+ </tr>
+ <tr>
+ <td>Zelda</td>
+ <td class="name">Castillo</td>
+ <td>Gardner</td>
+ <td>Lesotho</td>
+ <td class="email">aliquet.vel.vulputate@mauris.edu</td>
+ <td>Oct 10, 2012</td>
+ <td>45521</td>
+ </tr>
+ <tr>
+ <td>Raymond</td>
+ <td class="name">Drake</td>
+ <td>Gardena</td>
+ <td>Holy See (Vatican City State)</td>
+ <td class="email">fermentum.vel@mauris.com</td>
+ <td>Sep 9, 2012</td>
+ <td>12840</td>
+ </tr>
+ <tr>
+ <td>Gavin</td>
+ <td class="name">Simpson</td>
+ <td>Modesto</td>
+ <td>Guadeloupe</td>
+ <td class="email">Suspendisse@purusNullamscelerisque.edu</td>
+ <td>May 15, 2011</td>
+ <td>46777</td>
+ </tr>
+ <tr>
+ <td>Jamalia</td>
+ <td class="name">Barry</td>
+ <td>Milwaukee</td>
+ <td>Serbia and Montenegro</td>
+ <td class="email">sagittis.felis@natoquepenatibuset.org</td>
+ <td>May 14, 2012</td>
+ <td>28311</td>
+ </tr>
+ <tr>
+ <td>Alyssa</td>
+ <td class="name">Keith</td>
+ <td>Knoxville</td>
+ <td>Guinea</td>
+ <td class="email">malesuada.fames.ac@ac.ca</td>
+ <td>Nov 30, 2011</td>
+ <td>77779</td>
+ </tr>
+ <tr>
+ <td>Aretha</td>
+ <td class="name">Dickson</td>
+ <td>Nacogdoches</td>
+ <td>Nicaragua</td>
+ <td class="email">mattis.ornare@egestasDuis.ca</td>
+ <td>Oct 17, 2012</td>
+ <td>50273</td>
+ </tr>
+ <tr>
+ <td>Nadine</td>
+ <td class="name">Dillard</td>
+ <td>Layton</td>
+ <td>Egypt</td>
+ <td class="email">Cras@dolorFuscefeugiat.org</td>
+ <td>Feb 10, 2012</td>
+ <td>50001</td>
+ </tr>
+ <tr>
+ <td>Chastity</td>
+ <td class="name">Paul</td>
+ <td>Waco</td>
+ <td>Nigeria</td>
+ <td class="email">purus@Sedmalesuadaaugue.ca</td>
+ <td>Jul 17, 2012</td>
+ <td>64750</td>
+ </tr>
+ <tr>
+ <td>Calvin</td>
+ <td class="name">Tran</td>
+ <td>South Gate</td>
+ <td>Saint Lucia</td>
+ <td class="email">ut.odio@anteMaecenasmi.org</td>
+ <td>Apr 4, 2012</td>
+ <td>51272</td>
+ </tr>
+ <tr>
+ <td>Hanna</td>
+ <td class="name">Hendricks</td>
+ <td>Pierre</td>
+ <td>Tajikistan</td>
+ <td class="email">ante.ipsum@urnajustofaucibus.org</td>
+ <td>Jun 26, 2011</td>
+ <td>61236</td>
+ </tr>
+ <tr>
+ <td>Shay</td>
+ <td class="name">Thornton</td>
+ <td>Everett</td>
+ <td>Senegal</td>
+ <td class="email">urna.Nullam@quisdiam.ca</td>
+ <td>Dec 26, 2012</td>
+ <td>49295</td>
+ </tr>
+ <tr>
+ <td>Sonia</td>
+ <td class="name">Trujillo</td>
+ <td>Gold Beach</td>
+ <td>Portugal</td>
+ <td class="email">risus.a@pharetra.ca</td>
+ <td>Dec 18, 2011</td>
+ <td>88606</td>
+ </tr>
+ <tr>
+ <td>Remedios</td>
+ <td class="name">Conner</td>
+ <td>Everett</td>
+ <td>Liberia</td>
+ <td class="email">non@arcu.com</td>
+ <td>Sep 27, 2012</td>
+ <td>93858</td>
+ </tr>
+ <tr>
+ <td>Kelly</td>
+ <td class="name">Cook</td>
+ <td>Sheridan</td>
+ <td>Somalia</td>
+ <td class="email">molestie.dapibus.ligula@ligula.org</td>
+ <td>Aug 11, 2012</td>
+ <td>93466</td>
+ </tr>
+ <tr>
+ <td>Adrienne</td>
+ <td class="name">Kim</td>
+ <td>Signal Hill</td>
+ <td>Guadeloupe</td>
+ <td class="email">rutrum@quis.ca</td>
+ <td>Feb 18, 2011</td>
+ <td>14452</td>
+ </tr>
+ <tr>
+ <td>Daquan</td>
+ <td class="name">Miller</td>
+ <td>Duluth</td>
+ <td>Madagascar</td>
+ <td class="email">auctor@duisemper.com</td>
+ <td>Dec 2, 2011</td>
+ <td>83174</td>
+ </tr>
+ <tr>
+ <td>Dorothy</td>
+ <td class="name">Salas</td>
+ <td>Albuquerque</td>
+ <td>Bolivia</td>
+ <td class="email">eget.laoreet@mollisdui.org</td>
+ <td>Jul 24, 2012</td>
+ <td>20452</td>
+ </tr>
+ <tr>
+ <td>Octavia</td>
+ <td class="name">Mcclain</td>
+ <td>New Haven</td>
+ <td>Mauritania</td>
+ <td class="email">ipsum.porta.elit@a.edu</td>
+ <td>Sep 13, 2012</td>
+ <td>89452</td>
+ </tr>
+ <tr>
+ <td>Cooper</td>
+ <td class="name">Holt</td>
+ <td>Los Angeles</td>
+ <td>Korea</td>
+ <td class="email">consectetuer.mauris.id@nonbibendumsed.ca</td>
+ <td>Dec 4, 2012</td>
+ <td>14399</td>
+ </tr>
+ <tr>
+ <td>Dane</td>
+ <td class="name">Doyle</td>
+ <td>Springfield</td>
+ <td>Dominican Republic</td>
+ <td class="email">nibh.sit@augue.com</td>
+ <td>Nov 2, 2012</td>
+ <td>82940</td>
+ </tr>
+ <tr>
+ <td>Willow</td>
+ <td class="name">Wooten</td>
+ <td>Homer</td>
+ <td>Micronesia</td>
+ <td class="email">parturient.montes@tinciduntorci.org</td>
+ <td>Mar 7, 2011</td>
+ <td>63843</td>
+ </tr>
+ <tr>
+ <td>Jerome</td>
+ <td class="name">Petty</td>
+ <td>Asheville</td>
+ <td>Yemen</td>
+ <td class="email">posuere@aarcu.com</td>
+ <td>Feb 23, 2011</td>
+ <td>63889</td>
+ </tr>
+ <tr>
+ <td>Adrienne</td>
+ <td class="name">Mullen</td>
+ <td>Spartanburg</td>
+ <td>Tajikistan</td>
+ <td class="email">tempus.eu.ligula@idmollis.edu</td>
+ <td>May 10, 2012</td>
+ <td>65453</td>
+ </tr>
+ <tr>
+ <td>Whilemina</td>
+ <td class="name">Albert</td>
+ <td>Nashville</td>
+ <td>Greenland</td>
+ <td class="email">leo.elementum@vestibulumneceuismod.org</td>
+ <td>Dec 12, 2012</td>
+ <td>26021</td>
+ </tr>
+ <tr>
+ <td>Lawrence</td>
+ <td class="name">David</td>
+ <td>Truth or Consequences</td>
+ <td>Nepal</td>
+ <td class="email">nec@Donecelementum.edu</td>
+ <td>Jul 27, 2011</td>
+ <td>12423</td>
+ </tr>
+ <tr>
+ <td>Inez</td>
+ <td class="name">Berry</td>
+ <td>Parkersburg</td>
+ <td>Faroe Islands</td>
+ <td class="email">ante.Nunc.mauris@sapienmolestie.org</td>
+ <td>Apr 11, 2012</td>
+ <td>58958</td>
+ </tr>
+ <tr>
+ <td>Tatyana</td>
+ <td class="name">Nunez</td>
+ <td>Merced</td>
+ <td>Lithuania</td>
+ <td class="email">sagittis@ullamcorpervelit.edu</td>
+ <td>Apr 30, 2011</td>
+ <td>46279</td>
+ </tr>
+ <tr>
+ <td>Stuart</td>
+ <td class="name">Osborne</td>
+ <td>Newport</td>
+ <td>Saudi Arabia</td>
+ <td class="email">augue@acsemut.org</td>
+ <td>Jun 20, 2012</td>
+ <td>93292</td>
+ </tr>
+ <tr>
+ <td>Wallace</td>
+ <td class="name">Bryan</td>
+ <td>Yorba Linda</td>
+ <td>Netherlands Antilles</td>
+ <td class="email">ante.Maecenas@pede.edu</td>
+ <td>Jan 22, 2011</td>
+ <td>93991</td>
+ </tr>
+ <tr>
+ <td>Indigo</td>
+ <td class="name">Burgess</td>
+ <td>Nevada City</td>
+ <td>Western Sahara</td>
+ <td class="email">mauris.id@arcu.com</td>
+ <td>Sep 5, 2012</td>
+ <td>30552</td>
+ </tr>
+ <tr>
+ <td>Moses</td>
+ <td class="name">Craig</td>
+ <td>Vancouver</td>
+ <td>French Southern Territories</td>
+ <td class="email">ultrices.posuere.cubilia@neque.edu</td>
+ <td>Sep 18, 2011</td>
+ <td>84475</td>
+ </tr>
+ <tr>
+ <td>Randall</td>
+ <td class="name">Bray</td>
+ <td>Waltham</td>
+ <td>Saudi Arabia</td>
+ <td class="email">nascetur.ridiculus.mus@anteMaecenasmi.edu</td>
+ <td>Jul 28, 2011</td>
+ <td>93371</td>
+ </tr>
+ <tr>
+ <td>Sonia</td>
+ <td class="name">Moss</td>
+ <td>Auburn</td>
+ <td>Kyrgyzstan</td>
+ <td class="email">orci.lacus@auctor.ca</td>
+ <td>May 29, 2012</td>
+ <td>49758</td>
+ </tr>
+ <tr>
+ <td>Yeo</td>
+ <td class="name">Monroe</td>
+ <td>Ocean City</td>
+ <td>Trinidad and Tobago</td>
+ <td class="email">non.lacinia.at@non.com</td>
+ <td>Apr 2, 2011</td>
+ <td>35465</td>
+ </tr>
+ <tr>
+ <td>Uriah</td>
+ <td class="name">Farmer</td>
+ <td>Helena</td>
+ <td>Syrian Arab Republic</td>
+ <td class="email">erat@Sed.edu</td>
+ <td>Jul 18, 2012</td>
+ <td>46976</td>
+ </tr>
+ <tr>
+ <td>Natalie</td>
+ <td class="name">Torres</td>
+ <td>Battle Creek</td>
+ <td>Russian Federation</td>
+ <td class="email">Donec.est@sagittisfelis.com</td>
+ <td>May 14, 2012</td>
+ <td>41665</td>
+ </tr>
+ <tr>
+ <td>Vaughan</td>
+ <td class="name">Hines</td>
+ <td>Woodruff</td>
+ <td>Monaco</td>
+ <td class="email">ac@auctor.edu</td>
+ <td>Aug 14, 2012</td>
+ <td>74388</td>
+ </tr>
+ <tr>
+ <td>Paki</td>
+ <td class="name">Washington</td>
+ <td>York</td>
+ <td>Bouvet Island</td>
+ <td class="email">lobortis.augue.scelerisque@libero.ca</td>
+ <td>Jun 9, 2011</td>
+ <td>33377</td>
+ </tr>
+ <tr>
+ <td>Holmes</td>
+ <td class="name">Knight</td>
+ <td>Chickasha</td>
+ <td>Kuwait</td>
+ <td class="email">iaculis@parturient.edu</td>
+ <td>Feb 16, 2011</td>
+ <td>65302</td>
+ </tr>
+ <tr>
+ <td>acqueline</td>
+ <td class="name">Whitaker</td>
+ <td>Astoria</td>
+ <td>Western Sahara</td>
+ <td class="email">Maecenas.iaculis@Nullasempertellus.ca</td>
+ <td>Apr 22, 2012</td>
+ <td>94179</td>
+ </tr>
+ <tr>
+ <td>Jermaine</td>
+ <td class="name">Maldonado</td>
+ <td>Taylorsville</td>
+ <td>Kuwait</td>
+ <td class="email">auctor.velit.Aliquam@Curabiturconsequat.org</td>
+ <td>Dec 18, 2012</td>
+ <td>40460</td>
+ </tr>
+ <tr>
+ <td>Cara</td>
+ <td class="name">Branch</td>
+ <td>South El Monte</td>
+ <td>Gambia</td>
+ <td class="email">nec.orci@eratvelpede.org</td>
+ <td>Jan 14, 2012</td>
+ <td>90422</td>
+ </tr>
+ <tr>
+ <td>Germaine</td>
+ <td class="name">Pratt</td>
+ <td>Springfield</td>
+ <td>Holy See (Vatican City State)</td>
+ <td class="email">Proin.velit.Sed@maurisidsapien.edu</td>
+ <td>Jan 28, 2011</td>
+ <td>61328</td>
+ </tr>
+ <tr>
+ <td>Laith</td>
+ <td class="name">Moon</td>
+ <td>Calabasas</td>
+ <td>Kazakhstan</td>
+ <td class="email">Quisque@id.org</td>
+ <td>Apr 25, 2011</td>
+ <td>84477</td>
+ </tr>
+ <tr>
+ <td>Xavier</td>
+ <td class="name">Soto</td>
+ <td>Vermillion</td>
+ <td>Somalia</td>
+ <td class="email">semper@Nuncpulvinararcu.edu</td>
+ <td>Jul 21, 2012</td>
+ <td>68063</td>
+ </tr>
+ <tr>
+ <td>Vincent</td>
+ <td class="name">Mccarty</td>
+ <td>Hermosa Beach</td>
+ <td>Sierra Leone</td>
+ <td class="email">Sed.nunc.est@Donec.org</td>
+ <td>Feb 20, 2011</td>
+ <td>41500</td>
+ </tr>
+ <tr>
+ <td>Elmo</td>
+ <td class="name">Frank</td>
+ <td>Woonsocket</td>
+ <td>Iraq</td>
+ <td class="email">nonummy.ipsum.non@ipsum.org</td>
+ <td>Jan 31, 2011</td>
+ <td>93377</td>
+ </tr>
+ <tr>
+ <td>Oliver</td>
+ <td class="name">Osborne</td>
+ <td>San Diego</td>
+ <td>Niue</td>
+ <td class="email">mauris.ut@vehicula.edu</td>
+ <td>Aug 4, 2011</td>
+ <td>43556</td>
+ </tr>
+ <tr>
+ <td>Aquila</td>
+ <td class="name">Weeks</td>
+ <td>West Haven</td>
+ <td>Japan</td>
+ <td class="email">nunc.ac.mattis@interdumNunc.org</td>
+ <td>Aug 5, 2011</td>
+ <td>35863</td>
+ </tr>
+ <tr>
+ <td>Elijah</td>
+ <td class="name">Walters</td>
+ <td>Murfreesboro</td>
+ <td>Ethiopia</td>
+ <td class="email">lorem.ac@inhendrerit.com</td>
+ <td>Feb 23, 2011</td>
+ <td>18593</td>
+ </tr>
+ <tr>
+ <td>Kameko</td>
+ <td class="name">Williamson</td>
+ <td>San Fernando</td>
+ <td>France</td>
+ <td class="email">ornare.lectus@Phasellus.org</td>
+ <td>Aug 24, 2011</td>
+ <td>35638</td>
+ </tr>
+ <tr>
+ <td>Caesar</td>
+ <td class="name">Rivera</td>
+ <td>Downey</td>
+ <td>Benin</td>
+ <td class="email">consectetuer@metus.ca</td>
+ <td>May 29, 2011</td>
+ <td>70156</td>
+ </tr>
+ <tr>
+ <td>Angelica</td>
+ <td class="name">Dale</td>
+ <td>Needham</td>
+ <td>Niue</td>
+ <td class="email">gravida.mauris@et.org</td>
+ <td>Nov 28, 2011</td>
+ <td>32735</td>
+ </tr>
+ <tr>
+ <td>Wyatt</td>
+ <td class="name">Berg</td>
+ <td>Derby</td>
+ <td>Saint Lucia</td>
+ <td class="email">purus.Nullam@id.org</td>
+ <td>Feb 1, 2011</td>
+ <td>78528</td>
+ </tr>
+ <tr>
+ <td>Ulric</td>
+ <td class="name">Richmond</td>
+ <td>Marshall</td>
+ <td>Canada</td>
+ <td class="email">nec.tempus.mauris@mollis.org</td>
+ <td>Oct 11, 2011</td>
+ <td>16814</td>
+ </tr>
+ <tr>
+ <td>Kirk</td>
+ <td class="name">Mayer</td>
+ <td>Fernley</td>
+ <td>Cape Verde</td>
+ <td class="email">tristique@arcu.org</td>
+ <td>Mar 8, 2011</td>
+ <td>71848</td>
+ </tr>
+ <tr>
+ <td>Jermaine</td>
+ <td class="name">Mendez</td>
+ <td>Riverside</td>
+ <td>Pitcairn</td>
+ <td class="email">ullamcorper.magna@leoCras.ca</td>
+ <td>Dec 7, 2012</td>
+ <td>26973</td>
+ </tr>
+ <tr>
+ <td>Cedric</td>
+ <td class="name">Nielsen</td>
+ <td>West Lafayette</td>
+ <td>Poland</td>
+ <td class="email">ac.mi.eleifend@auctorvitae.org</td>
+ <td>May 23, 2012</td>
+ <td>98637</td>
+ </tr>
+ <tr>
+ <td>Amos</td>
+ <td class="name">Eaton</td>
+ <td>Miami Beach</td>
+ <td>Greenland</td>
+ <td class="email">ipsum.dolor@malesuada.edu</td>
+ <td>Feb 5, 2011</td>
+ <td>80953</td>
+ </tr>
+ <tr>
+ <td>Daryl</td>
+ <td class="name">Juarez</td>
+ <td>Huntington Park</td>
+ <td>Zimbabwe</td>
+ <td class="email">fermentum@eget.edu</td>
+ <td>Feb 15, 2011</td>
+ <td>87980</td>
+ </tr>
+ <tr>
+ <td>Wade</td>
+ <td class="name">Green</td>
+ <td>Marshall</td>
+ <td>Trinidad and Tobago</td>
+ <td class="email">iaculis@Crasdictumultricies.com</td>
+ <td>Sep 21, 2011</td>
+ <td>48791</td>
+ </tr>
+ <tr>
+ <td>Katell</td>
+ <td class="name">Harding</td>
+ <td>Perth Amboy</td>
+ <td>Barbados</td>
+ <td class="email">eros.Nam.consequat@velconvallisin.org</td>
+ <td>Mar 23, 2011</td>
+ <td>88383</td>
+ </tr>
+ <tr>
+ <td>Mason</td>
+ <td class="name">Vega</td>
+ <td>Guánica</td>
+ <td>Austria</td>
+ <td class="email">egestas.nunc.sed@Fuscedolorquam.com</td>
+ <td>May 13, 2012</td>
+ <td>11121</td>
+ </tr>
+ <tr>
+ <td>Theodore</td>
+ <td class="name">Dorsey</td>
+ <td>Hastings</td>
+ <td>Japan</td>
+ <td class="email">felis@sitametmetus.ca</td>
+ <td>Jan 10, 2011</td>
+ <td>22586</td>
+ </tr>
+ <tr>
+ <td>Eric</td>
+ <td class="name">Kinney</td>
+ <td>Manassas Park</td>
+ <td>Zimbabwe</td>
+ <td class="email">risus.quis@orci.edu</td>
+ <td>Apr 6, 2011</td>
+ <td>81470</td>
+ </tr>
+ <tr>
+ <td>Fay</td>
+ <td class="name">Rivas</td>
+ <td>Portland</td>
+ <td>Pakistan</td>
+ <td class="email">pede.Praesent.eu@metus.org</td>
+ <td>Apr 29, 2011</td>
+ <td>57277</td>
+ </tr>
+ <tr>
+ <td>Mia</td>
+ <td class="name">Mccormick</td>
+ <td>Saint Albans</td>
+ <td>Armenia</td>
+ <td class="email">Aliquam@afeugiat.ca</td>
+ <td>Jun 28, 2011</td>
+ <td>52182</td>
+ </tr>
+ <tr>
+ <td>Xaviera</td>
+ <td class="name">Brady</td>
+ <td>Whittier</td>
+ <td>Libyan Arab Jamahiriya</td>
+ <td class="email">nec@utmolestiein.ca</td>
+ <td>Apr 22, 2012</td>
+ <td>88677</td>
+ </tr>
+ <tr>
+ <td>Abbot</td>
+ <td class="name">Frost</td>
+ <td>Norwalk</td>
+ <td>Puerto Rico</td>
+ <td class="email">sit.amet.orci@intempus.edu</td>
+ <td>Apr 11, 2012</td>
+ <td>13782</td>
+ </tr>
+ <tr>
+ <td>Orlando</td>
+ <td class="name">Ryan</td>
+ <td>Newport Beach</td>
+ <td>Lithuania</td>
+ <td class="email">neque.venenatis.lacus@aclibero.com</td>
+ <td>Apr 14, 2011</td>
+ <td>29880</td>
+ </tr>
+ <tr>
+ <td>Rinah</td>
+ <td class="name">Huff</td>
+ <td>Fullerton</td>
+ <td>Saudi Arabia</td>
+ <td class="email">lectus.a.sollicitudin@orci.org</td>
+ <td>Sep 26, 2011</td>
+ <td>39492</td>
+ </tr>
+ <tr>
+ <td>Laura</td>
+ <td class="name">Mendez</td>
+ <td>North Little Rock</td>
+ <td>Cyprus</td>
+ <td class="email">vel.venenatis@DonecestNunc.ca</td>
+ <td>Feb 8, 2012</td>
+ <td>85620</td>
+ </tr>
+ <tr>
+ <td>Paloma</td>
+ <td class="name">Mathews</td>
+ <td>Norwalk</td>
+ <td>Guinea</td>
+ <td class="email">luctus@vehicula.ca</td>
+ <td>Mar 22, 2012</td>
+ <td>55662</td>
+ </tr>
+ <tr>
+ <td>Olga</td>
+ <td class="name">Morgan</td>
+ <td>West Valley City</td>
+ <td>Argentina</td>
+ <td class="email">neque.et@consequatauctor.org</td>
+ <td>Dec 29, 2012</td>
+ <td>15762</td>
+ </tr>
+ <tr>
+ <td>August</td>
+ <td class="name">Conner</td>
+ <td>Parkersburg</td>
+ <td>Puerto Rico</td>
+ <td class="email">purus.sapien@Donecfeugiat.org</td>
+ <td>Nov 25, 2011</td>
+ <td>26509</td>
+ </tr>
+ <tr>
+ <td>Xander</td>
+ <td class="name">Huff</td>
+ <td>Riverton</td>
+ <td>Nauru</td>
+ <td class="email">ipsum.porta.elit@quam.com</td>
+ <td>Sep 1, 2011</td>
+ <td>94997</td>
+ </tr>
+ <tr>
+ <td>Germane</td>
+ <td class="name">Becker</td>
+ <td>Morgan City</td>
+ <td>Gabon</td>
+ <td class="email">sed@egestas.ca</td>
+ <td>Aug 8, 2011</td>
+ <td>85931</td>
+ </tr>
+ <tr>
+ <td>Lunea</td>
+ <td class="name">Shaffer</td>
+ <td>Astoria</td>
+ <td>Finland</td>
+ <td class="email">elementum.dui@ipsum.org</td>
+ <td>Sep 6, 2012</td>
+ <td>12134</td>
+ </tr>
+ <tr>
+ <td>Ava</td>
+ <td class="name">Lynch</td>
+ <td>Lakewood</td>
+ <td>Sri Lanka</td>
+ <td class="email">arcu@velsapien.edu</td>
+ <td>Jun 6, 2011</td>
+ <td>99707</td>
+ </tr>
+ <tr>
+ <td>Colin</td>
+ <td class="name">Kerr</td>
+ <td>Bandon</td>
+ <td>Slovakia</td>
+ <td class="email">eros.turpis.non@semperrutrumFusce.org</td>
+ <td>Mar 27, 2012</td>
+ <td>60649</td>
+ </tr>
+ <tr>
+ <td>Sydnee</td>
+ <td class="name">French</td>
+ <td>Hoover</td>
+ <td>Tuvalu</td>
+ <td class="email">dolor.nonummy@ornaretortor.ca</td>
+ <td>May 29, 2012</td>
+ <td>96750</td>
+ </tr>
+ <tr>
+ <td>Vincent</td>
+ <td class="name">Velasquez</td>
+ <td>Lowell</td>
+ <td>Iran, Islamic Republic of</td>
+ <td class="email">Curabitur.vel.lectus@nonbibendumsed.ca</td>
+ <td>Apr 27, 2012</td>
+ <td>87557</td>
+ </tr>
+ <tr>
+ <td>Ifeoma</td>
+ <td class="name">Chambers</td>
+ <td>Guayanilla</td>
+ <td>Kyrgyzstan</td>
+ <td class="email">Maecenas.libero.est@tristiquealiquet.edu</td>
+ <td>Dec 21, 2012</td>
+ <td>39714</td>
+ </tr>
+ <tr>
+ <td>Fritz</td>
+ <td class="name">Bowman</td>
+ <td>North Pole</td>
+ <td>Reunion</td>
+ <td class="email">lorem@scelerisquenequeNullam.edu</td>
+ <td>Feb 12, 2011</td>
+ <td>56527</td>
+ </tr>
+ <tr>
+ <td>Giacomo</td>
+ <td class="name">Britt</td>
+ <td>Kearney</td>
+ <td>Taiwan, Province of China</td>
+ <td class="email">adipiscing.lobortis@Duissit.org</td>
+ <td>Aug 7, 2011</td>
+ <td>53705</td>
+ </tr>
+ <tr>
+ <td>Benjamin</td>
+ <td class="name">Barton</td>
+ <td>Northampton</td>
+ <td>Kenya</td>
+ <td class="email">amet.nulla@elementumsem.com</td>
+ <td>Apr 10, 2012</td>
+ <td>85073</td>
+ </tr>
+ <tr>
+ <td>Jessamine</td>
+ <td class="name">Patrick</td>
+ <td>Ventura</td>
+ <td>Brazil</td>
+ <td class="email">ante.Maecenas@nonegestas.com</td>
+ <td>Aug 26, 2011</td>
+ <td>58440</td>
+ </tr>
+ <tr>
+ <td>Madonna</td>
+ <td class="name">Nolan</td>
+ <td>North Little Rock</td>
+ <td>Bahrain</td>
+ <td class="email">gravida.Praesent@mollis.com</td>
+ <td>Apr 30, 2011</td>
+ <td>90700</td>
+ </tr>
+ <tr>
+ <td>Lacey</td>
+ <td class="name">Kerr</td>
+ <td>Watertown</td>
+ <td>Cook Islands</td>
+ <td class="email">vitae.sodales.nisi@hendreritidante.org</td>
+ <td>Oct 6, 2011</td>
+ <td>27521</td>
+ </tr>
+ <tr>
+ <td>Hunter</td>
+ <td class="name">Bray</td>
+ <td>Tucson</td>
+ <td>Gibraltar</td>
+ <td class="email">libero@orci.com</td>
+ <td>Oct 30, 2012</td>
+ <td>63157</td>
+ </tr>
+ <tr>
+ <td>Bruno</td>
+ <td class="name">Black</td>
+ <td>El Monte</td>
+ <td>Sao Tome and Principe</td>
+ <td class="email">lacus@egetmassaSuspendisse.ca</td>
+ <td>Apr 7, 2011</td>
+ <td>40092</td>
+ </tr>
+ <tr>
+ <td>Eugenia</td>
+ <td class="name">Houston</td>
+ <td>Sheridan</td>
+ <td>Ecuador</td>
+ <td class="email">consectetuer.adipiscing@inmolestietortor.com</td>
+ <td>Jan 31, 2011</td>
+ <td>39917</td>
+ </tr>
+ <tr>
+ <td>Mia</td>
+ <td class="name">Robertson</td>
+ <td>Jenks</td>
+ <td>Micronesia</td>
+ <td class="email">Aenean@scelerisquenequeNullam.edu</td>
+ <td>Dec 9, 2011</td>
+ <td>42336</td>
+ </tr>
+ <tr>
+ <td>Yoko</td>
+ <td class="name">Hammond</td>
+ <td>Johnson City</td>
+ <td>Dominica</td>
+ <td class="email">hendrerit@In.ca</td>
+ <td>Sep 14, 2011</td>
+ <td>93520</td>
+ </tr>
+ <tr>
+ <td>Illana</td>
+ <td class="name">Fisher</td>
+ <td>Hawaiian Gardens</td>
+ <td>Egypt</td>
+ <td class="email">tincidunt.vehicula@id.org</td>
+ <td>Nov 9, 2011</td>
+ <td>46651</td>
+ </tr>
+ <tr>
+ <td>Lenore</td>
+ <td class="name">Clemons</td>
+ <td>Columbia</td>
+ <td>Andorra</td>
+ <td class="email">Nunc.lectus.pede@loremfringillaornare.org</td>
+ <td>Jul 20, 2011</td>
+ <td>92360</td>
+ </tr>
+ <tr>
+ <td>Alec</td>
+ <td class="name">Norris</td>
+ <td>Fitchburg</td>
+ <td>Kenya</td>
+ <td class="email">faucibus.ut.nulla@arcu.org</td>
+ <td>May 18, 2012</td>
+ <td>10905</td>
+ </tr>
+ <tr>
+ <td>Tanisha</td>
+ <td class="name">Whitley</td>
+ <td>Fontana</td>
+ <td>Eritrea</td>
+ <td class="email">pede@sociosqu.edu</td>
+ <td>May 25, 2012</td>
+ <td>82800</td>
+ </tr>
+ <tr>
+ <td>Merritt</td>
+ <td class="name">Olsen</td>
+ <td>Worland</td>
+ <td>Switzerland</td>
+ <td class="email">scelerisque.dui.Suspendisse@Vivamus.com</td>
+ <td>May 7, 2011</td>
+ <td>87447</td>
+ </tr>
+ <tr>
+ <td>Edward</td>
+ <td class="name">Holcomb</td>
+ <td>Marshall</td>
+ <td>Monaco</td>
+ <td class="email">augue.porttitor.interdum@tortor.com</td>
+ <td>Aug 6, 2012</td>
+ <td>61315</td>
+ </tr>
+ <tr>
+ <td>Ursa</td>
+ <td class="name">Frazier</td>
+ <td>Marshall</td>
+ <td>Cuba</td>
+ <td class="email">ipsum.Suspendisse@nulla.edu</td>
+ <td>Jul 26, 2011</td>
+ <td>24337</td>
+ </tr>
+ <tr>
+ <td>Myra</td>
+ <td class="name">Oneill</td>
+ <td>Somerville</td>
+ <td>Palau</td>
+ <td class="email">justo.Praesent@Morbiquis.ca</td>
+ <td>May 27, 2012</td>
+ <td>84087</td>
+ </tr>
+ <tr>
+ <td>Lane</td>
+ <td class="name">Copeland</td>
+ <td>Easthampton</td>
+ <td>Bolivia</td>
+ <td class="email">rhoncus.id.mollis@Inat.edu</td>
+ <td>Apr 16, 2011</td>
+ <td>98227</td>
+ </tr>
+ <tr>
+ <td>Harriet</td>
+ <td class="name">Witt</td>
+ <td>Farmington</td>
+ <td>Turks and Caicos Islands</td>
+ <td class="email">nunc@utquamvel.org</td>
+ <td>Apr 10, 2012</td>
+ <td>72511</td>
+ </tr>
+ <tr>
+ <td>Imogene</td>
+ <td class="name">Holman</td>
+ <td>Hermosa Beach</td>
+ <td>Estonia</td>
+ <td class="email">velit@enimEtiamgravida.org</td>
+ <td>Jun 21, 2012</td>
+ <td>76124</td>
+ </tr>
+ <tr>
+ <td>Germane</td>
+ <td class="name">Cross</td>
+ <td>Waltham</td>
+ <td>Myanmar</td>
+ <td class="email">turpis@aultriciesadipiscing.org</td>
+ <td>Oct 30, 2012</td>
+ <td>82327</td>
+ </tr>
+ <tr>
+ <td>Skyler</td>
+ <td class="name">Vargas</td>
+ <td>San Bernardino</td>
+ <td>Cameroon</td>
+ <td class="email">elit.Aliquam.auctor@blandit.com</td>
+ <td>Sep 15, 2011</td>
+ <td>79466</td>
+ </tr>
+ <tr>
+ <td>Clinton</td>
+ <td class="name">Ortega</td>
+ <td>Crown Point</td>
+ <td>Montserrat</td>
+ <td class="email">ipsum.Donec.sollicitudin@magnaLorem.ca</td>
+ <td>May 11, 2012</td>
+ <td>24649</td>
+ </tr>
+ <tr>
+ <td>Karleigh</td>
+ <td class="name">Cooke</td>
+ <td>Hawaiian Gardens</td>
+ <td>Kenya</td>
+ <td class="email">Vivamus.rhoncus.Donec@nec.org</td>
+ <td>Feb 10, 2012</td>
+ <td>73887</td>
+ </tr>
+ <tr>
+ <td>Gisela</td>
+ <td class="name">Hoover</td>
+ <td>Newport News</td>
+ <td>Burkina Faso</td>
+ <td class="email">sed.dui@pretium.ca</td>
+ <td>Jan 13, 2012</td>
+ <td>45465</td>
+ </tr>
+ <tr>
+ <td>Hayes</td>
+ <td class="name">Colon</td>
+ <td>Beverly</td>
+ <td>Morocco</td>
+ <td class="email">pede.Nunc.sed@porttitorerosnec.ca</td>
+ <td>Nov 5, 2011</td>
+ <td>78814</td>
+ </tr>
+ <tr>
+ <td>Jasmine</td>
+ <td class="name">Glover</td>
+ <td>Westlake Village</td>
+ <td>Suriname</td>
+ <td class="email">tristique.aliquet.Phasellus@odioauctor.com</td>
+ <td>Aug 1, 2011</td>
+ <td>20519</td>
+ </tr>
+ <tr>
+ <td>Morgan</td>
+ <td class="name">Obrien</td>
+ <td>Methuen</td>
+ <td>French Southern Territories</td>
+ <td class="email">sem.vitae.aliquam@duiFuscediam.ca</td>
+ <td>Nov 1, 2012</td>
+ <td>78567</td>
+ </tr>
+ <tr>
+ <td>Genevieve</td>
+ <td class="name">Castro</td>
+ <td>West Covina</td>
+ <td>Israel</td>
+ <td class="email">Donec.vitae.erat@magnanec.edu</td>
+ <td>Jul 15, 2012</td>
+ <td>37708</td>
+ </tr>
+ <tr>
+ <td>Iona</td>
+ <td class="name">Knapp</td>
+ <td>Ogden</td>
+ <td>Hungary</td>
+ <td class="email">eu.tellus@risus.com</td>
+ <td>May 17, 2012</td>
+ <td>54340</td>
+ </tr>
+ <tr>
+ <td>Abraham</td>
+ <td class="name">Browning</td>
+ <td>Citrus Heights</td>
+ <td>Mauritius</td>
+ <td class="email">elit.Aliquam@Maurisvelturpis.ca</td>
+ <td>Mar 29, 2011</td>
+ <td>53530</td>
+ </tr>
+ <tr>
+ <td>Wylie</td>
+ <td class="name">Fisher</td>
+ <td>North Platte</td>
+ <td>Turkmenistan</td>
+ <td class="email">velit.Sed.malesuada@auctorMauris.edu</td>
+ <td>Mar 13, 2011</td>
+ <td>72092</td>
+ </tr>
+ <tr>
+ <td>Kaden</td>
+ <td class="name">Knapp</td>
+ <td>Corinth</td>
+ <td>Canada</td>
+ <td class="email">luctus.Curabitur.egestas@mollisInteger.com</td>
+ <td>Nov 18, 2011</td>
+ <td>13259</td>
+ </tr>
+ <tr>
+ <td>Lane</td>
+ <td class="name">Hopper</td>
+ <td>Cedar Falls</td>
+ <td>Saint Helena</td>
+ <td class="email">magna@Intinciduntcongue.ca</td>
+ <td>Aug 9, 2012</td>
+ <td>70839</td>
+ </tr>
+ <tr>
+ <td>Clark</td>
+ <td class="name">Pickett</td>
+ <td>Westminster</td>
+ <td>Svalbard and Jan Mayen</td>
+ <td class="email">magna.a@libero.ca</td>
+ <td>Jan 28, 2011</td>
+ <td>38246</td>
+ </tr>
+ <tr>
+ <td>Ima</td>
+ <td class="name">Brewer</td>
+ <td>Dover</td>
+ <td>Dominica</td>
+ <td class="email">non.lacinia@mi.edu</td>
+ <td>Apr 12, 2012</td>
+ <td>87923</td>
+ </tr>
+ <tr>
+ <td>Ivana</td>
+ <td class="name">Bentley</td>
+ <td>Anchorage</td>
+ <td>Montserrat</td>
+ <td class="email">Aliquam.adipiscing@egestasDuis.ca</td>
+ <td>Jul 9, 2012</td>
+ <td>51544</td>
+ </tr>
+ <tr>
+ <td>Alexa</td>
+ <td class="name">Bowen</td>
+ <td>El Monte</td>
+ <td>Belarus</td>
+ <td class="email">blandit.enim@atauctorullamcorper.org</td>
+ <td>Oct 11, 2010</td>
+ <td>84775</td>
+ </tr>
+ <tr>
+ <td>Chaim</td>
+ <td class="name">Chavez</td>
+ <td>Vineland</td>
+ <td>Iran, Islamic Republic of</td>
+ <td class="email">aliquam.enim@convallis.ca</td>
+ <td>Aug 6, 2010</td>
+ <td>17277</td>
+ </tr>
+ <tr>
+ <td>Forrest</td>
+ <td class="name">Hickman</td>
+ <td>Cedar Falls</td>
+ <td>Grenada</td>
+ <td class="email">libero@odiovel.edu</td>
+ <td>Nov 17, 2011</td>
+ <td>57833</td>
+ </tr>
+ <tr>
+ <td>Teagan</td>
+ <td class="name">Boyle</td>
+ <td>New Kensington</td>
+ <td>Cayman Islands</td>
+ <td class="email">sapien@tellus.org</td>
+ <td>Jun 19, 2011</td>
+ <td>16784</td>
+ </tr>
+ <tr>
+ <td>Robert</td>
+ <td class="name">Prince</td>
+ <td>Duluth</td>
+ <td>Rwanda</td>
+ <td class="email">bibendum@mauris.edu</td>
+ <td>Aug 4, 2011</td>
+ <td>26445</td>
+ </tr>
+ <tr>
+ <td>Elmo</td>
+ <td class="name">House</td>
+ <td>Naperville</td>
+ <td>Jamaica</td>
+ <td class="email">non.massa.non@velit.edu</td>
+ <td>May 15, 2012</td>
+ <td>36274</td>
+ </tr>
+ <tr>
+ <td>Susan</td>
+ <td class="name">Webster</td>
+ <td>Hialeah</td>
+ <td>Libyan Arab Jamahiriya</td>
+ <td class="email">Integer@augueporttitorinterdum.org</td>
+ <td>Aug 5, 2010</td>
+ <td>39872</td>
+ </tr>
+ <tr>
+ <td>Keelie</td>
+ <td class="name">Gomez</td>
+ <td>Bellflower</td>
+ <td>Sao Tome and Principe</td>
+ <td class="email">et@euarcu.com</td>
+ <td>May 25, 2012</td>
+ <td>59393</td>
+ </tr>
+ <tr>
+ <td>Jessica</td>
+ <td class="name">Potts</td>
+ <td>York</td>
+ <td>Belgium</td>
+ <td class="email">sem@ProinvelitSed.edu</td>
+ <td>Mar 16, 2012</td>
+ <td>77425</td>
+ </tr>
+ <tr>
+ <td>Naida</td>
+ <td class="name">Anthony</td>
+ <td>Pittston</td>
+ <td>Bangladesh</td>
+ <td class="email">Sed.pharetra@nonsapien.com</td>
+ <td>Apr 23, 2011</td>
+ <td>25448</td>
+ </tr>
+ <tr>
+ <td>Lysandra</td>
+ <td class="name">Ryan</td>
+ <td>Macomb</td>
+ <td>Papua New Guinea</td>
+ <td class="email">justo.Proin@necurnaet.ca</td>
+ <td>Mar 7, 2011</td>
+ <td>42613</td>
+ </tr>
+ <tr>
+ <td>Kyla</td>
+ <td class="name">Harrington</td>
+ <td>Boulder</td>
+ <td>Martinique</td>
+ <td class="email">quam.vel@vulputateeu.org</td>
+ <td>Nov 24, 2011</td>
+ <td>53564</td>
+ </tr>
+ <tr>
+ <td>Uriah</td>
+ <td class="name">Graham</td>
+ <td>Littleton</td>
+ <td>Netherlands Antilles</td>
+ <td class="email">Quisque.purus@Pellentesquehabitant.com</td>
+ <td>Jul 24, 2012</td>
+ <td>75568</td>
+ </tr>
+ <tr>
+ <td>Damian</td>
+ <td class="name">Valentine</td>
+ <td>Marshall</td>
+ <td>Saint Pierre and Miquelon</td>
+ <td class="email">Aliquam.vulputate@Proinvel.edu</td>
+ <td>Sep 5, 2012</td>
+ <td>34683</td>
+ </tr>
+ <tr>
+ <td>Tallulah</td>
+ <td class="name">Olson</td>
+ <td>Orlando</td>
+ <td>Western Sahara</td>
+ <td class="email">nec@hendrerit.com</td>
+ <td>Feb 10, 2012</td>
+ <td>93023</td>
+ </tr>
+ <tr>
+ <td>Ashely</td>
+ <td class="name">Dillard</td>
+ <td>Evanston</td>
+ <td>Mexico</td>
+ <td class="email">Ut.semper.pretium@facilisiseget.ca</td>
+ <td>Jun 25, 2011</td>
+ <td>89936</td>
+ </tr>
+ <tr>
+ <td>Amery</td>
+ <td class="name">Aguirre</td>
+ <td>Santa Clara</td>
+ <td>Monaco</td>
+ <td class="email">sollicitudin.orci.sem@metussitamet.ca</td>
+ <td>Feb 24, 2010</td>
+ <td>84137</td>
+ </tr>
+ <tr>
+ <td>Hermione</td>
+ <td class="name">Savage</td>
+ <td>Longview</td>
+ <td>Bahamas</td>
+ <td class="email">consequat.auctor.nunc@Phasellus.com</td>
+ <td>Jun 21, 2011</td>
+ <td>57413</td>
+ </tr>
+ <tr>
+ <td>Yuli</td>
+ <td class="name">Heath</td>
+ <td>Roswell</td>
+ <td>El Salvador</td>
+ <td class="email">mauris.id.sapien@cursusvestibulumMauris.ca</td>
+ <td>Jan 21, 2012</td>
+ <td>76836</td>
+ </tr>
+ <tr>
+ <td>Jackson</td>
+ <td class="name">Young</td>
+ <td>Richland</td>
+ <td>Egypt</td>
+ <td class="email">nibh.enim@tincidunttempus.org</td>
+ <td>Aug 20, 2010</td>
+ <td>63793</td>
+ </tr>
+ <tr>
+ <td>Bernard</td>
+ <td class="name">Barker</td>
+ <td>Irwindale</td>
+ <td>Namibia</td>
+ <td class="email">nonummy@diamDuis.com</td>
+ <td>May 8, 2010</td>
+ <td>72461</td>
+ </tr>
+ <tr>
+ <td>Sebastian</td>
+ <td class="name">Elliott</td>
+ <td>Boulder</td>
+ <td>Namibia</td>
+ <td class="email">neque.Nullam@nec.org</td>
+ <td>Aug 13, 2010</td>
+ <td>27289</td>
+ </tr>
+ <tr>
+ <td>Danielle</td>
+ <td class="name">Bowman</td>
+ <td>Columbus</td>
+ <td>Yemen</td>
+ <td class="email">tristique.aliquet@aliquamadipiscing.edu</td>
+ <td>Mar 19, 2011</td>
+ <td>22118</td>
+ </tr>
+ <tr>
+ <td>Lois</td>
+ <td class="name">Carpenter</td>
+ <td>Citrus Heights</td>
+ <td>Angola</td>
+ <td class="email">faucibus.Morbi.vehicula@Aliquam.org</td>
+ <td>Feb 22, 2011</td>
+ <td>57546</td>
+ </tr>
+ <tr>
+ <td>Roary</td>
+ <td class="name">Hodge</td>
+ <td>San Jose</td>
+ <td>Turkey</td>
+ <td class="email">eget@faucibusMorbivehicula.ca</td>
+ <td>May 8, 2012</td>
+ <td>65655</td>
+ </tr>
+ <tr>
+ <td>Jarrod</td>
+ <td class="name">Bean</td>
+ <td>Plantation</td>
+ <td>Norfolk Island</td>
+ <td class="email">lobortis@enimSed.edu</td>
+ <td>Apr 22, 2012</td>
+ <td>52368</td>
+ </tr>
+ <tr>
+ <td>Mikayla</td>
+ <td class="name">Newton</td>
+ <td>New Iberia</td>
+ <td>Svalbard and Jan Mayen</td>
+ <td class="email">nulla.Integer.urna@fringilla.com</td>
+ <td>Aug 30, 2010</td>
+ <td>73613</td>
+ </tr>
+ <tr>
+ <td>Jane</td>
+ <td class="name">Foley</td>
+ <td>Cape Coral</td>
+ <td>Egypt</td>
+ <td class="email">blandit@interdumCurabitur.com</td>
+ <td>Apr 18, 2012</td>
+ <td>44932</td>
+ </tr>
+ <tr>
+ <td>Rina</td>
+ <td class="name">Trevino</td>
+ <td>Kansas City</td>
+ <td>Macao</td>
+ <td class="email">Suspendisse.aliquet@dolorsit.edu</td>
+ <td>Sep 6, 2010</td>
+ <td>66005</td>
+ </tr>
+ <tr>
+ <td>Jamal</td>
+ <td class="name">Owens</td>
+ <td>Fallon</td>
+ <td>Bangladesh</td>
+ <td class="email">nec.imperdiet@necante.ca</td>
+ <td>May 15, 2012</td>
+ <td>94380</td>
+ </tr>
+ <tr>
+ <td>Griffith</td>
+ <td class="name">Hahn</td>
+ <td>Dothan</td>
+ <td>Liechtenstein</td>
+ <td class="email">est.tempor@lobortisrisusIn.org</td>
+ <td>Jun 9, 2010</td>
+ <td>19795</td>
+ </tr>
+ <tr>
+ <td>Lesley</td>
+ <td class="name">Holman</td>
+ <td>Allentown</td>
+ <td>Antarctica</td>
+ <td class="email">pretium.et.rutrum@gravidasit.org</td>
+ <td>Jan 24, 2012</td>
+ <td>58357</td>
+ </tr>
+ <tr>
+ <td>Bryar</td>
+ <td class="name">Austin</td>
+ <td>Dickinson</td>
+ <td>Iraq</td>
+ <td class="email">odio@Curabituregestas.com</td>
+ <td>Jan 20, 2010</td>
+ <td>37722</td>
+ </tr>
+ <tr>
+ <td>Joan</td>
+ <td class="name">Russell</td>
+ <td>Pasadena</td>
+ <td>Qatar</td>
+ <td class="email">nec@odio.org</td>
+ <td>Apr 21, 2010</td>
+ <td>81376</td>
+ </tr>
+ <tr>
+ <td>Ava</td>
+ <td class="name">Browning</td>
+ <td>Denver</td>
+ <td>Benin</td>
+ <td class="email">augue@venenatislacusEtiam.org</td>
+ <td>Aug 8, 2012</td>
+ <td>31651</td>
+ </tr>
+ <tr>
+ <td>Chester</td>
+ <td class="name">Schneider</td>
+ <td>El Paso</td>
+ <td>Ireland</td>
+ <td class="email">aliquet@Praesent.ca</td>
+ <td>Jun 15, 2010</td>
+ <td>67225</td>
+ </tr>
+ <tr>
+ <td>Warren</td>
+ <td class="name">Harvey</td>
+ <td>Kalamazoo</td>
+ <td>New Zealand</td>
+ <td class="email">metus@arcuNuncmauris.org</td>
+ <td>Feb 2, 2011</td>
+ <td>51295</td>
+ </tr>
+ <tr>
+ <td>Aubrey</td>
+ <td class="name">Ross</td>
+ <td>Milford</td>
+ <td>French Guiana</td>
+ <td class="email">euismod.est.arcu@uteros.com</td>
+ <td>Mar 10, 2011</td>
+ <td>25247</td>
+ </tr>
+ <tr>
+ <td>Roary</td>
+ <td class="name">Mack</td>
+ <td>Yonkers</td>
+ <td>Bangladesh</td>
+ <td class="email">Duis.sit.amet@mauriselit.ca</td>
+ <td>Jan 24, 2011</td>
+ <td>41355</td>
+ </tr>
+ <tr>
+ <td>Roth</td>
+ <td class="name">Sears</td>
+ <td>Reno</td>
+ <td>Egypt</td>
+ <td class="email">malesuada.vel@nequevitaesemper.edu</td>
+ <td>Apr 19, 2011</td>
+ <td>74318</td>
+ </tr>
+ <tr>
+ <td>Skyler</td>
+ <td class="name">Dale</td>
+ <td>Loudon</td>
+ <td>Ireland</td>
+ <td class="email">urna.justo@sit.ca</td>
+ <td>Aug 13, 2012</td>
+ <td>54593</td>
+ </tr>
+ <tr>
+ <td>Castor</td>
+ <td class="name">Rocha</td>
+ <td>Azusa</td>
+ <td>Cape Verde</td>
+ <td class="email">ac.urna.Ut@nislarcu.edu</td>
+ <td>Jun 27, 2011</td>
+ <td>35174</td>
+ </tr>
+ <tr>
+ <td>Maris</td>
+ <td class="name">Bailey</td>
+ <td>Bremerton</td>
+ <td>Holy See (Vatican City State)</td>
+ <td class="email">arcu@non.ca</td>
+ <td>Jul 26, 2011</td>
+ <td>45543</td>
+ </tr>
+ <tr>
+ <td>Zoe</td>
+ <td class="name">Shaffer</td>
+ <td>New Brunswick</td>
+ <td>Luxembourg</td>
+ <td class="email">Aenean@Mauriseuturpis.edu</td>
+ <td>Nov 27, 2010</td>
+ <td>89966</td>
+ </tr>
+ <tr>
+ <td>Tamekah</td>
+ <td class="name">Frazier</td>
+ <td>Oxford</td>
+ <td>United Kingdom</td>
+ <td class="email">enim.Etiam@facilisisSuspendissecommodo.ca</td>
+ <td>May 6, 2011</td>
+ <td>26346</td>
+ </tr>
+ <tr>
+ <td>Camilla</td>
+ <td class="name">Hyde</td>
+ <td>Cudahy</td>
+ <td>Equatorial Guinea</td>
+ <td class="email">semper.dui.lectus@Nuncuterat.ca</td>
+ <td>Oct 24, 2011</td>
+ <td>82129</td>
+ </tr>
+ <tr>
+ <td>Josiah</td>
+ <td class="name">Rivers</td>
+ <td>Nome</td>
+ <td>Bosnia and Herzegovina</td>
+ <td class="email">commodo@auctor.com</td>
+ <td>Feb 16, 2012</td>
+ <td>44720</td>
+ </tr>
+ <tr>
+ <td>Barbara</td>
+ <td class="name">Clements</td>
+ <td>Philadelphia</td>
+ <td>Saint Vincent and The Grenadines</td>
+ <td class="email">est@nisi.edu</td>
+ <td>Jul 2, 2010</td>
+ <td>19925</td>
+ </tr>
+ <tr>
+ <td>Dominique</td>
+ <td class="name">Copeland</td>
+ <td>Monongahela</td>
+ <td>Latvia</td>
+ <td class="email">lectus.quis@ametornarelectus.org</td>
+ <td>May 3, 2010</td>
+ <td>77608</td>
+ </tr>
+ <tr>
+ <td>Benjamin</td>
+ <td class="name">Ayers</td>
+ <td>Manassas Park</td>
+ <td>Romania</td>
+ <td class="email">fringilla@variusNam.edu</td>
+ <td>Sep 22, 2010</td>
+ <td>92397</td>
+ </tr>
+ <tr>
+ <td>Quyn</td>
+ <td class="name">Bray</td>
+ <td>Blythe</td>
+ <td>Korea, Republic of</td>
+ <td class="email">euismod.mauris.eu@aenim.com</td>
+ <td>Jun 20, 2012</td>
+ <td>71773</td>
+ </tr>
+ <tr>
+ <td>Deirdre</td>
+ <td class="name">Mathews</td>
+ <td>Thibodaux</td>
+ <td>Spain</td>
+ <td class="email">Vivamus@vestibulum.org</td>
+ <td>Jul 4, 2012</td>
+ <td>80830</td>
+ </tr>
+ <tr>
+ <td>Rachel</td>
+ <td class="name">Rasmussen</td>
+ <td>Scarborough</td>
+ <td>French Guiana</td>
+ <td class="email">nunc.ullamcorper@pellentesque.com</td>
+ <td>May 11, 2011</td>
+ <td>20930</td>
+ </tr>
+ <tr>
+ <td>Alexandra</td>
+ <td class="name">Buck</td>
+ <td>Danville</td>
+ <td>Bouvet Island</td>
+ <td class="email">ut.nisi@dui.edu</td>
+ <td>Dec 1, 2012</td>
+ <td>66928</td>
+ </tr>
+ <tr>
+ <td>Thomas</td>
+ <td class="name">Jennings</td>
+ <td>Corvallis</td>
+ <td>Sierra Leone</td>
+ <td class="email">eget@magna.com</td>
+ <td>Nov 2, 2011</td>
+ <td>82381</td>
+ </tr>
+ <tr>
+ <td>Geoffrey</td>
+ <td class="name">Battle</td>
+ <td>Mesquite</td>
+ <td>Cape Verde</td>
+ <td class="email">quam.elementum@ante.edu</td>
+ <td>Jan 11, 2011</td>
+ <td>51073</td>
+ </tr>
+ <tr>
+ <td>Lee</td>
+ <td class="name">Clements</td>
+ <td>Minnetonka</td>
+ <td>Slovakia</td>
+ <td class="email">ipsum@liberoDonecconsectetuer.com</td>
+ <td>May 3, 2010</td>
+ <td>18778</td>
+ </tr>
+ <tr>
+ <td>Devin</td>
+ <td class="name">Ewing</td>
+ <td>Missoula</td>
+ <td>Korea, Republic of</td>
+ <td class="email">Suspendisse@Fuscefermentumfermentum.com</td>
+ <td>Mar 5, 2012</td>
+ <td>99433</td>
+ </tr>
+ <tr>
+ <td>Alexandra</td>
+ <td class="name">Rodgers</td>
+ <td>Auburn</td>
+ <td>Monaco</td>
+ <td class="email">eu.turpis.Nulla@Pellentesquehabitant.ca</td>
+ <td>Nov 6, 2010</td>
+ <td>79762</td>
+ </tr>
+ <tr>
+ <td>Kasimir</td>
+ <td class="name">Hoover</td>
+ <td>West Haven</td>
+ <td>Belgium</td>
+ <td class="email">placerat@dolor.ca</td>
+ <td>Feb 29, 2012</td>
+ <td>64648</td>
+ </tr>
+ <tr>
+ <td>Conan</td>
+ <td class="name">Carroll</td>
+ <td>Temecula</td>
+ <td>Seychelles</td>
+ <td class="email">ullamcorper.eu@arcueu.edu</td>
+ <td>Sep 4, 2011</td>
+ <td>19256</td>
+ </tr>
+ <tr>
+ <td>Frances</td>
+ <td class="name">Cotton</td>
+ <td>Texarkana</td>
+ <td>Guinea-bissau</td>
+ <td class="email">metus.In.lorem@massaSuspendisseeleifend.ca</td>
+ <td>Apr 5, 2010</td>
+ <td>66057</td>
+ </tr>
+ <tr>
+ <td>Charles</td>
+ <td class="name">Hess</td>
+ <td>Bay St. Louis</td>
+ <td>Burkina Faso</td>
+ <td class="email">lectus.pede@Suspendisseac.com</td>
+ <td>Jul 19, 2011</td>
+ <td>35043</td>
+ </tr>
+ <tr>
+ <td>Georgia</td>
+ <td class="name">Morse</td>
+ <td>Jeffersontown</td>
+ <td>Czech Republic</td>
+ <td class="email">scelerisque.sed@nunc.com</td>
+ <td>Jan 5, 2011</td>
+ <td>42891</td>
+ </tr>
+ <tr>
+ <td>Cleo</td>
+ <td class="name">Parsons</td>
+ <td>Mission Viejo</td>
+ <td>Benin</td>
+ <td class="email">quam@temporeratneque.ca</td>
+ <td>Mar 8, 2012</td>
+ <td>84366</td>
+ </tr>
+ <tr>
+ <td>Jarrod</td>
+ <td class="name">Welch</td>
+ <td>Dubuque</td>
+ <td>Malaysia</td>
+ <td class="email">elit@temporestac.com</td>
+ <td>Oct 3, 2012</td>
+ <td>33928</td>
+ </tr>
+ <tr>
+ <td>Quinn</td>
+ <td class="name">Shepherd</td>
+ <td>Urbana</td>
+ <td>Colombia</td>
+ <td class="email">lorem@lobortis.com</td>
+ <td>Dec 17, 2011</td>
+ <td>65585</td>
+ </tr>
+ <tr>
+ <td>Madonna</td>
+ <td class="name">Nguyen</td>
+ <td>Galveston</td>
+ <td>Colombia</td>
+ <td class="email">ut.lacus.Nulla@Aliquamnisl.edu</td>
+ <td>May 6, 2012</td>
+ <td>39223</td>
+ </tr>
+ <tr>
+ <td>Karly</td>
+ <td class="name">Patterson</td>
+ <td>Fairbanks</td>
+ <td>Saint Vincent and The Grenadines</td>
+ <td class="email">Nulla@aodio.ca</td>
+ <td>Jun 4, 2011</td>
+ <td>99687</td>
+ </tr>
+ <tr>
+ <td>Garrison</td>
+ <td class="name">Morales</td>
+ <td>Signal Hill</td>
+ <td>Egypt</td>
+ <td class="email">ipsum.nunc.id@odiosemper.edu</td>
+ <td>Feb 5, 2012</td>
+ <td>15949</td>
+ </tr>
+ <tr>
+ <td>Nathaniel</td>
+ <td class="name">Rosa</td>
+ <td>Radford</td>
+ <td>Andorra</td>
+ <td class="email">ac.mattis.semper@neceleifend.edu</td>
+ <td>Mar 11, 2012</td>
+ <td>69517</td>
+ </tr>
+ <tr>
+ <td>Sophia</td>
+ <td class="name">Page</td>
+ <td>Hartford</td>
+ <td>Cambodia</td>
+ <td class="email">non.justo@Sedet.org</td>
+ <td>Sep 27, 2012</td>
+ <td>45944</td>
+ </tr>
+ <tr>
+ <td>Wylie</td>
+ <td class="name">Ayers</td>
+ <td>Athens</td>
+ <td>Singapore</td>
+ <td class="email">commodo@lacusvariuset.ca</td>
+ <td>May 15, 2011</td>
+ <td>88601</td>
+ </tr>
+ <tr>
+ <td>Wilma</td>
+ <td class="name">Morse</td>
+ <td>Orlando</td>
+ <td>Papua New Guinea</td>
+ <td class="email">neque.venenatis@Aliquam.edu</td>
+ <td>Sep 18, 2010</td>
+ <td>42911</td>
+ </tr>
+ <tr>
+ <td>Patience</td>
+ <td class="name">Benton</td>
+ <td>Bayamon</td>
+ <td>Botswana</td>
+ <td class="email">mus@Suspendisseacmetus.com</td>
+ <td>Jan 28, 2010</td>
+ <td>46908</td>
+ </tr>
+ <tr>
+ <td>Cadman</td>
+ <td class="name">Hubbard</td>
+ <td>Kahului</td>
+ <td>Chile</td>
+ <td class="email">In@eu.org</td>
+ <td>Mar 27, 2011</td>
+ <td>10924</td>
+ </tr>
+ <tr>
+ <td>Samantha</td>
+ <td class="name">Matthews</td>
+ <td>Olympia</td>
+ <td>Liberia</td>
+ <td class="email">Aenean@felis.com</td>
+ <td>Jan 9, 2012</td>
+ <td>41131</td>
+ </tr>
+ <tr>
+ <td>Roary</td>
+ <td class="name">Carrillo</td>
+ <td>Independence</td>
+ <td>Tanzania, United Republic of</td>
+ <td class="email">tellus@dolorsit.com</td>
+ <td>Dec 13, 2010</td>
+ <td>89903</td>
+ </tr>
+ <tr>
+ <td>Heidi</td>
+ <td class="name">Knowles</td>
+ <td>Glens Falls</td>
+ <td>Sudan</td>
+ <td class="email">et.magna.Praesent@sedconsequat.org</td>
+ <td>May 13, 2011</td>
+ <td>25299</td>
+ </tr>
+ <tr>
+ <td>Portia</td>
+ <td class="name">Guthrie</td>
+ <td>Redlands</td>
+ <td>Iran, Islamic Republic of</td>
+ <td class="email">amet.consectetuer.adipiscing@imperdietullamcorperDuis.com</td>
+ <td>Jul 14, 2011</td>
+ <td>22884</td>
+ </tr>
+ <tr>
+ <td>Grace</td>
+ <td class="name">Duncan</td>
+ <td>Farmington</td>
+ <td>San Marino</td>
+ <td class="email">mattis@gravidamolestie.org</td>
+ <td>Sep 27, 2010</td>
+ <td>78597</td>
+ </tr>
+ <tr>
+ <td>Ian</td>
+ <td class="name">Walter</td>
+ <td>Enid</td>
+ <td>Saint Pierre and Miquelon</td>
+ <td class="email">sed.hendrerit.a@montesnascetur.org</td>
+ <td>Mar 28, 2011</td>
+ <td>89844</td>
+ </tr>
+ <tr>
+ <td>Julian</td>
+ <td class="name">Jarvis</td>
+ <td>Eden Prairie</td>
+ <td>Dominica</td>
+ <td class="email">dolor.Donec.fringilla@pede.edu</td>
+ <td>Nov 20, 2011</td>
+ <td>72256</td>
+ </tr>
+ <tr>
+ <td>Quinn</td>
+ <td class="name">Kent</td>
+ <td>Webster Groves</td>
+ <td>Azerbaijan</td>
+ <td class="email">mollis@sedpede.org</td>
+ <td>Jan 14, 2012</td>
+ <td>24170</td>
+ </tr>
+ <tr>
+ <td>Ignatius</td>
+ <td class="name">Ayala</td>
+ <td>Bossier City</td>
+ <td>Paraguay</td>
+ <td class="email">nunc.sit.amet@Vivamusnon.edu</td>
+ <td>Dec 26, 2012</td>
+ <td>43263</td>
+ </tr>
+ <tr>
+ <td>Aidan</td>
+ <td class="name">Parker</td>
+ <td>Sitka</td>
+ <td>Estonia</td>
+ <td class="email">in.faucibus.orci@infelis.com</td>
+ <td>May 4, 2010</td>
+ <td>57859</td>
+ </tr>
+ <tr>
+ <td>Sydnee</td>
+ <td class="name">Burton</td>
+ <td>Apple Valley</td>
+ <td>Spain</td>
+ <td class="email">auctor@laciniamattisInteger.ca</td>
+ <td>Oct 19, 2010</td>
+ <td>56678</td>
+ </tr>
+ <tr>
+ <td>Wing</td>
+ <td class="name">Hahn</td>
+ <td>Medford</td>
+ <td>Austria</td>
+ <td class="email">dis@anteipsumprimis.com</td>
+ <td>Nov 18, 2011</td>
+ <td>21517</td>
+ </tr>
+ <tr>
+ <td>Bell</td>
+ <td class="name">Jefferson</td>
+ <td>Sheridan</td>
+ <td>United Kingdom</td>
+ <td class="email">odio.Etiam.ligula@idmollis.ca</td>
+ <td>Feb 11, 2011</td>
+ <td>11836</td>
+ </tr>
+ <tr>
+ <td>Mikayla</td>
+ <td class="name">Simpson</td>
+ <td>Cedar Rapids</td>
+ <td>Philippines</td>
+ <td class="email">montes.nascetur.ridiculus@consectetuercursuset.edu</td>
+ <td>Nov 19, 2012</td>
+ <td>95092</td>
+ </tr>
+ <tr>
+ <td>Bianca</td>
+ <td class="name">Boyer</td>
+ <td>Gainesville</td>
+ <td>Niue</td>
+ <td class="email">neque@magnaaneque.edu</td>
+ <td>Jan 23, 2010</td>
+ <td>49385</td>
+ </tr>
+ <tr>
+ <td>Ciara</td>
+ <td class="name">Crawford</td>
+ <td>Tyler</td>
+ <td>Antarctica</td>
+ <td class="email">bibendum@maurisanunc.ca</td>
+ <td>Jul 13, 2012</td>
+ <td>79513</td>
+ </tr>
+ <tr>
+ <td>Sasha</td>
+ <td class="name">Jarvis</td>
+ <td>New Madrid</td>
+ <td>Virgin Islands, U.S.</td>
+ <td class="email">amet@molestie.ca</td>
+ <td>Feb 14, 2011</td>
+ <td>49687</td>
+ </tr>
+ <tr>
+ <td>Blythe</td>
+ <td class="name">Woodward</td>
+ <td>Mankato</td>
+ <td>Israel</td>
+ <td class="email">penatibus.et@urnaconvalliserat.ca</td>
+ <td>Nov 19, 2011</td>
+ <td>94109</td>
+ </tr>
+ <tr>
+ <td>Anne</td>
+ <td class="name">Weaver</td>
+ <td>Cedar Rapids</td>
+ <td>Viet Nam</td>
+ <td class="email">auctor.ullamcorper.nisl@ettristique.edu</td>
+ <td>May 31, 2012</td>
+ <td>48021</td>
+ </tr>
+ <tr>
+ <td>Kylee</td>
+ <td class="name">Walsh</td>
+ <td>Tok</td>
+ <td>Chile</td>
+ <td class="email">et.netus.et@Vestibulumante.edu</td>
+ <td>Nov 15, 2011</td>
+ <td>42566</td>
+ </tr>
+ <tr>
+ <td>Mercedes</td>
+ <td class="name">Gilmore</td>
+ <td>Green Bay</td>
+ <td>Colombia</td>
+ <td class="email">adipiscing.elit.Aliquam@Etiamimperdietdictum.org</td>
+ <td>May 15, 2010</td>
+ <td>66483</td>
+ </tr>
+ <tr>
+ <td>Keaton</td>
+ <td class="name">Nielsen</td>
+ <td>Monterey</td>
+ <td>Pakistan</td>
+ <td class="email">magna.et@Classaptenttaciti.com</td>
+ <td>Jan 2, 2011</td>
+ <td>16342</td>
+ </tr>
+ <tr>
+ <td>Morgan</td>
+ <td class="name">Tyson</td>
+ <td>Alamogordo</td>
+ <td>Moldova</td>
+ <td class="email">ante@commodohendrerit.edu</td>
+ <td>May 31, 2011</td>
+ <td>88703</td>
+ </tr>
+ <tr>
+ <td>Venus</td>
+ <td class="name">Sargent</td>
+ <td>Dana Point</td>
+ <td>Falkland Islands (Malvinas)</td>
+ <td class="email">adipiscing@commodo.org</td>
+ <td>Oct 15, 2012</td>
+ <td>89640</td>
+ </tr>
+ <tr>
+ <td>Katelyn</td>
+ <td class="name">Bruce</td>
+ <td>Meriden</td>
+ <td>Bermuda</td>
+ <td class="email">dictum.Phasellus.in@laciniaSed.com</td>
+ <td>Mar 30, 2010</td>
+ <td>11089</td>
+ </tr>
+ <tr>
+ <td>Ross</td>
+ <td class="name">Caldwell</td>
+ <td>Vergennes</td>
+ <td>South Georgia and The South Sandwich Islands</td>
+ <td class="email">purus.sapien.gravida@loremacrisus.org</td>
+ <td>Oct 15, 2011</td>
+ <td>91296</td>
+ </tr>
+ <tr>
+ <td>Cynthia</td>
+ <td class="name">Larsen</td>
+ <td>Powell</td>
+ <td>Japan</td>
+ <td class="email">congue.In.scelerisque@mollisInteger.org</td>
+ <td>Dec 18, 2010</td>
+ <td>11310</td>
+ </tr>
+ <tr>
+ <td>Wyoming</td>
+ <td class="name">Cash</td>
+ <td>Burlington</td>
+ <td>Macedonia</td>
+ <td class="email">sem@risusNuncac.org</td>
+ <td>Sep 10, 2011</td>
+ <td>24041</td>
+ </tr>
+ <tr>
+ <td>Vanna</td>
+ <td class="name">Ingram</td>
+ <td>Falls Church</td>
+ <td>Sweden</td>
+ <td class="email">libero@egestasascelerisque.com</td>
+ <td>Apr 24, 2012</td>
+ <td>51287</td>
+ </tr>
+ <tr>
+ <td>Wallace</td>
+ <td class="name">Mays</td>
+ <td>Winooski</td>
+ <td>Oman</td>
+ <td class="email">consectetuer@porttitorinterdum.ca</td>
+ <td>Mar 26, 2012</td>
+ <td>13627</td>
+ </tr>
+ <tr>
+ <td>Jasper</td>
+ <td class="name">Sears</td>
+ <td>Coos Bay</td>
+ <td>Montserrat</td>
+ <td class="email">eu.tellus@mollisPhasellus.com</td>
+ <td>Feb 22, 2010</td>
+ <td>23076</td>
+ </tr>
+ <tr>
+ <td>Clinton</td>
+ <td class="name">Foley</td>
+ <td>New Albany</td>
+ <td>Libyan Arab Jamahiriya</td>
+ <td class="email">luctus@vestibulummassa.ca</td>
+ <td>Feb 25, 2010</td>
+ <td>86135</td>
+ </tr>
+ <tr>
+ <td>Jesse</td>
+ <td class="name">Sweet</td>
+ <td>Jamestown</td>
+ <td>Korea</td>
+ <td class="email">orci.adipiscing@a.ca</td>
+ <td>Apr 3, 2012</td>
+ <td>20037</td>
+ </tr>
+ <tr>
+ <td>Abigail</td>
+ <td class="name">Guerra</td>
+ <td>Warwick</td>
+ <td>Comoros</td>
+ <td class="email">tincidunt.adipiscing.Mauris@odioa.com</td>
+ <td>Mar 12, 2010</td>
+ <td>11847</td>
+ </tr>
+ <tr>
+ <td>Linda</td>
+ <td class="name">Lucas</td>
+ <td>Gainesville</td>
+ <td>Costa Rica</td>
+ <td class="email">scelerisque@nulla.com</td>
+ <td>Apr 8, 2010</td>
+ <td>15278</td>
+ </tr>
+ <tr>
+ <td>Hasad</td>
+ <td class="name">Willis</td>
+ <td>Webster Groves</td>
+ <td>Solomon Islands</td>
+ <td class="email">et.rutrum@Nunc.com</td>
+ <td>Oct 21, 2011</td>
+ <td>23930</td>
+ </tr>
+ <tr>
+ <td>Rhea</td>
+ <td class="name">Jenkins</td>
+ <td>Malden</td>
+ <td>Rwanda</td>
+ <td class="email">molestie.tellus.Aenean@pede.ca</td>
+ <td>May 15, 2012</td>
+ <td>42759</td>
+ </tr>
+ <tr>
+ <td>Gay</td>
+ <td class="name">Lott</td>
+ <td>Union City</td>
+ <td>Norway</td>
+ <td class="email">euismod.ac.fermentum@amet.com</td>
+ <td>Jun 25, 2010</td>
+ <td>66935</td>
+ </tr>
+ <tr>
+ <td>Vanna</td>
+ <td class="name">Stuart</td>
+ <td>Nevada City</td>
+ <td>Thailand</td>
+ <td class="email">orci.lobortis.augue@nonummyac.org</td>
+ <td>Aug 15, 2011</td>
+ <td>86717</td>
+ </tr>
+ <tr>
+ <td>Bert</td>
+ <td class="name">Lewis</td>
+ <td>Gardner</td>
+ <td>Netherlands Antilles</td>
+ <td class="email">nec@lectus.com</td>
+ <td>Mar 27, 2010</td>
+ <td>14565</td>
+ </tr>
+ <tr>
+ <td>Melinda</td>
+ <td class="name">Nieves</td>
+ <td>Murfreesboro</td>
+ <td>Micronesia</td>
+ <td class="email">dignissim.lacus@tempusscelerisque.edu</td>
+ <td>Feb 17, 2012</td>
+ <td>12357</td>
+ </tr>
+ <tr>
+ <td>Bevis</td>
+ <td class="name">Carson</td>
+ <td>Twin Falls</td>
+ <td>Portugal</td>
+ <td class="email">facilisis@massaSuspendisseeleifend.org</td>
+ <td>May 4, 2011</td>
+ <td>55060</td>
+ </tr>
+ <tr>
+ <td>Destiny</td>
+ <td class="name">Morse</td>
+ <td>Asheville</td>
+ <td>Montserrat</td>
+ <td class="email">ultrices@ligulaNullam.org</td>
+ <td>May 15, 2012</td>
+ <td>92200</td>
+ </tr>
+ <tr>
+ <td>Indira</td>
+ <td class="name">English</td>
+ <td>Moore</td>
+ <td>Anguilla</td>
+ <td class="email">at.risus.Nunc@nullaInteger.com</td>
+ <td>May 24, 2011</td>
+ <td>63852</td>
+ </tr>
+ <tr>
+ <td>Henry</td>
+ <td class="name">Kelly</td>
+ <td>Rialto</td>
+ <td>French Polynesia</td>
+ <td class="email">dictum@utmiDuis.edu</td>
+ <td>Feb 13, 2010</td>
+ <td>50835</td>
+ </tr>
+ <tr>
+ <td>Jemima</td>
+ <td class="name">Hubbard</td>
+ <td>Bowling Green</td>
+ <td>Lithuania</td>
+ <td class="email">Vivamus@faucibusidlibero.ca</td>
+ <td>Jan 15, 2011</td>
+ <td>48072</td>
+ </tr>
+ <tr>
+ <td>Kevin</td>
+ <td class="name">Colon</td>
+ <td>Pendleton</td>
+ <td>Brazil</td>
+ <td class="email">placerat@tincidunt.ca</td>
+ <td>Oct 12, 2011</td>
+ <td>48952</td>
+ </tr>
+ <tr>
+ <td>Chester</td>
+ <td class="name">Frank</td>
+ <td>Vernon</td>
+ <td>United States</td>
+ <td class="email">Nam.tempor@parturientmontesnascetur.edu</td>
+ <td>Feb 20, 2010</td>
+ <td>91649</td>
+ </tr>
+ <tr>
+ <td>Yardley</td>
+ <td class="name">Mayo</td>
+ <td>Guayanilla</td>
+ <td>Barbados</td>
+ <td class="email">ut@lectussit.edu</td>
+ <td>Jul 15, 2012</td>
+ <td>28804</td>
+ </tr>
+ <tr>
+ <td>Fletcher</td>
+ <td class="name">Mayer</td>
+ <td>Hot Springs</td>
+ <td>American Samoa</td>
+ <td class="email">diam.at.pretium@velitegestas.edu</td>
+ <td>May 25, 2010</td>
+ <td>51273</td>
+ </tr>
+ <tr>
+ <td>Chaim</td>
+ <td class="name">Hebert</td>
+ <td>Rosemead</td>
+ <td>Bhutan</td>
+ <td class="email">dignissim.Maecenas@et.ca</td>
+ <td>Jan 26, 2010</td>
+ <td>40706</td>
+ </tr>
+ <tr>
+ <td>Yael</td>
+ <td class="name">Stewart</td>
+ <td>Valdosta</td>
+ <td>Ghana</td>
+ <td class="email">sit.amet.consectetuer@urnajustofaucibus.ca</td>
+ <td>Jul 5, 2010</td>
+ <td>78757</td>
+ </tr>
+ <tr>
+ <td>Lynn</td>
+ <td class="name">Davis</td>
+ <td>Glens Falls</td>
+ <td>American Samoa</td>
+ <td class="email">Fusce@duiin.ca</td>
+ <td>Dec 16, 2010</td>
+ <td>85887</td>
+ </tr>
+ <tr>
+ <td>Deanna</td>
+ <td class="name">Whitaker</td>
+ <td>Durant</td>
+ <td>Andorra</td>
+ <td class="email">lectus@sitamet.org</td>
+ <td>Apr 18, 2012</td>
+ <td>36856</td>
+ </tr>
+ <tr>
+ <td>Mark</td>
+ <td class="name">Moore</td>
+ <td>Claremore</td>
+ <td>Mauritius</td>
+ <td class="email">Vivamus.non.lorem@euismodest.org</td>
+ <td>Nov 26, 2010</td>
+ <td>51924</td>
+ </tr>
+ <tr>
+ <td>Jasper</td>
+ <td class="name">Carrillo</td>
+ <td>Pendleton</td>
+ <td>Slovenia</td>
+ <td class="email">adipiscing@duiinsodales.org</td>
+ <td>Feb 26, 2012</td>
+ <td>66731</td>
+ </tr>
+ <tr>
+ <td>Mara</td>
+ <td class="name">Wilson</td>
+ <td>Mount Vernon</td>
+ <td>Timor-leste</td>
+ <td class="email">Etiam.bibendum.fermentum@fringillaest.ca</td>
+ <td>May 23, 2011</td>
+ <td>23185</td>
+ </tr>
+ <tr>
+ <td>Nash</td>
+ <td class="name">Mckenzie</td>
+ <td>San Antonio</td>
+ <td>Taiwan, Province of China</td>
+ <td class="email">sagittis@atarcuVestibulum.com</td>
+ <td>Nov 22, 2011</td>
+ <td>57595</td>
+ </tr>
+ <tr>
+ <td>Chelsea</td>
+ <td class="name">Wade</td>
+ <td>Palos Verdes Estates</td>
+ <td>Timor-leste</td>
+ <td class="email">lacus.pede.sagittis@cursusinhendrerit.org</td>
+ <td>Dec 14, 2010</td>
+ <td>58960</td>
+ </tr>
+ <tr>
+ <td>Colleen</td>
+ <td class="name">English</td>
+ <td>Madison</td>
+ <td>Slovenia</td>
+ <td class="email">natoque@tempusnon.ca</td>
+ <td>Jul 6, 2012</td>
+ <td>48007</td>
+ </tr>
+ <tr>
+ <td>Raphael</td>
+ <td class="name">Mckee</td>
+ <td>Anderson</td>
+ <td>Mexico</td>
+ <td class="email">malesuada.ut@accumsan.ca</td>
+ <td>May 15, 2011</td>
+ <td>80875</td>
+ </tr>
+ <tr>
+ <td>Zelda</td>
+ <td class="name">Bridges</td>
+ <td>Portland</td>
+ <td>Oman</td>
+ <td class="email">odio.a.purus@milacinia.edu</td>
+ <td>Dec 27, 2012</td>
+ <td>22586</td>
+ </tr>
+ <tr>
+ <td>Gavin</td>
+ <td class="name">Dunlap</td>
+ <td>Idaho Springs</td>
+ <td>Taiwan, Province of China</td>
+ <td class="email">Mauris@enimEtiam.edu</td>
+ <td>Jul 16, 2010</td>
+ <td>36437</td>
+ </tr>
+ <tr>
+ <td>Wendy</td>
+ <td class="name">Wood</td>
+ <td>Tok</td>
+ <td>Virgin Islands, British</td>
+ <td class="email">felis.ullamcorper@Integer.ca</td>
+ <td>May 7, 2011</td>
+ <td>16187</td>
+ </tr>
+ <tr>
+ <td>Mercedes</td>
+ <td class="name">Sampson</td>
+ <td>Cicero</td>
+ <td>Holy See (Vatican City State)</td>
+ <td class="email">sem.vitae@dolorFuscefeugiat.ca</td>
+ <td>Feb 10, 2010</td>
+ <td>89633</td>
+ </tr>
+ <tr>
+ <td>Brianna</td>
+ <td class="name">Flowers</td>
+ <td>Catskill</td>
+ <td>Maldives</td>
+ <td class="email">ut@Praesent.org</td>
+ <td>Jun 5, 2012</td>
+ <td>36980</td>
+ </tr>
+ <tr>
+ <td>Selma</td>
+ <td class="name">Olson</td>
+ <td>Fajardo</td>
+ <td>Russian Federation</td>
+ <td class="email">lacus.pede@Pellentesque.org</td>
+ <td>Nov 28, 2011</td>
+ <td>92402</td>
+ </tr>
+ <tr>
+ <td>Talon</td>
+ <td class="name">Hardin</td>
+ <td>Pueblo</td>
+ <td>Austria</td>
+ <td class="email">In.mi.pede@ullamcorper.edu</td>
+ <td>Sep 16, 2010</td>
+ <td>24422</td>
+ </tr>
+ <tr>
+ <td>Joy</td>
+ <td class="name">Frost</td>
+ <td>Knoxville</td>
+ <td>Niger</td>
+ <td class="email">at.pretium.aliquet@dolornonummyac.edu</td>
+ <td>Apr 30, 2012</td>
+ <td>62456</td>
+ </tr>
+ <tr>
+ <td>David</td>
+ <td class="name">Adams</td>
+ <td>Elko</td>
+ <td>Malaysia</td>
+ <td class="email">mi.ac.mattis@telluslorem.org</td>
+ <td>Oct 2, 2011</td>
+ <td>18044</td>
+ </tr>
+ <tr>
+ <td>Paula</td>
+ <td class="name">Moody</td>
+ <td>Lake Charles</td>
+ <td>Kuwait</td>
+ <td class="email">posuere.at.velit@consequatlectussit.ca</td>
+ <td>Feb 27, 2010</td>
+ <td>88109</td>
+ </tr>
+ <tr>
+ <td>April</td>
+ <td class="name">Gray</td>
+ <td>Cody</td>
+ <td>Macao</td>
+ <td class="email">ac@netus.ca</td>
+ <td>Oct 12, 2011</td>
+ <td>36822</td>
+ </tr>
+ <tr>
+ <td>Indigo</td>
+ <td class="name">David</td>
+ <td>Forrest City</td>
+ <td>Philippines</td>
+ <td class="email">rutrum.Fusce.dolor@sitamet.ca</td>
+ <td>May 24, 2011</td>
+ <td>43871</td>
+ </tr>
+ <tr>
+ <td>Colorado</td>
+ <td class="name">Mendez</td>
+ <td>Alexandria</td>
+ <td>Paraguay</td>
+ <td class="email">lacinia@loremtristiquealiquet.org</td>
+ <td>Aug 12, 2010</td>
+ <td>81867</td>
+ </tr>
+ <tr>
+ <td>Marah</td>
+ <td class="name">Newman</td>
+ <td>Chester</td>
+ <td>South Africa</td>
+ <td class="email">gravida@enimcondimentumeget.edu</td>
+ <td>Apr 5, 2010</td>
+ <td>84464</td>
+ </tr>
+ <tr>
+ <td>Lydia</td>
+ <td class="name">Hoover</td>
+ <td>Baldwin Park</td>
+ <td>Turkmenistan</td>
+ <td class="email">elit@tristiquealiquetPhasellus.ca</td>
+ <td>Aug 13, 2012</td>
+ <td>84024</td>
+ </tr>
+ <tr>
+ <td>Caldwell</td>
+ <td class="name">Carroll</td>
+ <td>Kalispell</td>
+ <td>Canada</td>
+ <td class="email">gravida.molestie.arcu@euplacerateget.com</td>
+ <td>Jan 6, 2010</td>
+ <td>51769</td>
+ </tr>
+ <tr>
+ <td>Latifah</td>
+ <td class="name">Wallace</td>
+ <td>Calumet City</td>
+ <td>Russian Federation</td>
+ <td class="email">pede.ultrices.a@leoinlobortis.org</td>
+ <td>Jul 21, 2010</td>
+ <td>91338</td>
+ </tr>
+ <tr>
+ <td>Indigo</td>
+ <td class="name">Delgado</td>
+ <td>Grambling</td>
+ <td>Lebanon</td>
+ <td class="email">Aenean@enim.com</td>
+ <td>Sep 12, 2011</td>
+ <td>30225</td>
+ </tr>
+ <tr>
+ <td>Urielle</td>
+ <td class="name">Hayes</td>
+ <td>Haverhill</td>
+ <td>Guatemala</td>
+ <td class="email">Sed.neque@inmagnaPhasellus.ca</td>
+ <td>Oct 2, 2011</td>
+ <td>27377</td>
+ </tr>
+ <tr>
+ <td>Sydney</td>
+ <td class="name">Matthews</td>
+ <td>Calumet City</td>
+ <td>Algeria</td>
+ <td class="email">enim@adipiscing.com</td>
+ <td>May 25, 2012</td>
+ <td>94769</td>
+ </tr>
+ <tr>
+ <td>Blaine</td>
+ <td class="name">Vargas</td>
+ <td>Clearwater</td>
+ <td>Kazakhstan</td>
+ <td class="email">penatibus.et@pellentesquemassalobortis.com</td>
+ <td>May 21, 2010</td>
+ <td>27036</td>
+ </tr>
+ <tr>
+ <td>Ulric</td>
+ <td class="name">Gordon</td>
+ <td>Moscow</td>
+ <td>Finland</td>
+ <td class="email">sem.ut.cursus@nonante.org</td>
+ <td>May 7, 2011</td>
+ <td>55246</td>
+ </tr>
+ <tr>
+ <td>Rina</td>
+ <td class="name">Howard</td>
+ <td>Bellingham</td>
+ <td>United Arab Emirates</td>
+ <td class="email">ornare.egestas@dictumeuplacerat.org</td>
+ <td>Oct 29, 2011</td>
+ <td>37461</td>
+ </tr>
+ <tr>
+ <td>Octavia</td>
+ <td class="name">Orr</td>
+ <td>Decatur</td>
+ <td>Tonga</td>
+ <td class="email">malesuada@ut.com</td>
+ <td>Jul 5, 2012</td>
+ <td>68834</td>
+ </tr>
+ <tr>
+ <td>Devin</td>
+ <td class="name">Dickerson</td>
+ <td>Alameda</td>
+ <td>Sweden</td>
+ <td class="email">ante.ipsum@quam.com</td>
+ <td>Apr 20, 2011</td>
+ <td>61040</td>
+ </tr>
+ <tr>
+ <td>Kessie</td>
+ <td class="name">Carlson</td>
+ <td>Allentown</td>
+ <td>Nepal</td>
+ <td class="email">sodales@atliberoMorbi.com</td>
+ <td>Jan 3, 2011</td>
+ <td>62411</td>
+ </tr>
+ <tr>
+ <td>Ciaran</td>
+ <td class="name">Wilkerson</td>
+ <td>Enid</td>
+ <td>Ireland</td>
+ <td class="email">eleifend.Cras.sed@nibh.com</td>
+ <td>Dec 9, 2010</td>
+ <td>43612</td>
+ </tr>
+ <tr>
+ <td>Paula</td>
+ <td class="name">Rasmussen</td>
+ <td>New Bedford</td>
+ <td>Saint Pierre and Miquelon</td>
+ <td class="email">cursus.a@ametnulla.edu</td>
+ <td>Feb 27, 2012</td>
+ <td>83735</td>
+ </tr>
+ <tr>
+ <td>Cecilia</td>
+ <td class="name">Pierce</td>
+ <td>Westfield</td>
+ <td>Christmas Island</td>
+ <td class="email">at.egestas@velitdui.ca</td>
+ <td>Oct 28, 2012</td>
+ <td>92440</td>
+ </tr>
+ <tr>
+ <td>Ursa</td>
+ <td class="name">Campos</td>
+ <td>Texas City</td>
+ <td>Colombia</td>
+ <td class="email">ipsum.Suspendisse@atpretium.ca</td>
+ <td>Apr 16, 2011</td>
+ <td>18777</td>
+ </tr>
+ <tr>
+ <td>Zelenia</td>
+ <td class="name">Mcguire</td>
+ <td>South Portland</td>
+ <td>Myanmar</td>
+ <td class="email">Sed.auctor@feugiattelluslorem.edu</td>
+ <td>Oct 10, 2012</td>
+ <td>93813</td>
+ </tr>
+ <tr>
+ <td>Mary</td>
+ <td class="name">Diaz</td>
+ <td>Omaha</td>
+ <td>Nauru</td>
+ <td class="email">amet.consectetuer@necorci.com</td>
+ <td>Aug 23, 2012</td>
+ <td>63436</td>
+ </tr>
+ <tr>
+ <td>Adam</td>
+ <td class="name">Erickson</td>
+ <td>Raleigh</td>
+ <td>Tonga</td>
+ <td class="email">sit.amet@cursusInteger.ca</td>
+ <td>Dec 22, 2012</td>
+ <td>55020</td>
+ </tr>
+ <tr>
+ <td>Celeste</td>
+ <td class="name">Tran</td>
+ <td>Bossier City</td>
+ <td>Anguilla</td>
+ <td class="email">luctus.sit@augueSed.com</td>
+ <td>Aug 20, 2012</td>
+ <td>58914</td>
+ </tr>
+ <tr>
+ <td>Charity</td>
+ <td class="name">Vincent</td>
+ <td>Salinas</td>
+ <td>Svalbard and Jan Mayen</td>
+ <td class="email">molestie.in@auctorMaurisvel.com</td>
+ <td>Apr 12, 2012</td>
+ <td>27311</td>
+ </tr>
+ <tr>
+ <td>Reese</td>
+ <td class="name">Francis</td>
+ <td>La Mirada</td>
+ <td>Malawi</td>
+ <td class="email">ante@etmalesuadafames.edu</td>
+ <td>Mar 9, 2012</td>
+ <td>76277</td>
+ </tr>
+ <tr>
+ <td>Germaine</td>
+ <td class="name">Cole</td>
+ <td>North Las Vegas</td>
+ <td>Jordan</td>
+ <td class="email">ut@eunequepellentesque.com</td>
+ <td>Nov 5, 2010</td>
+ <td>25574</td>
+ </tr>
+ <tr>
+ <td>Dana</td>
+ <td class="name">Mccray</td>
+ <td>Bozeman</td>
+ <td>American Samoa</td>
+ <td class="email">et.magnis@Donec.ca</td>
+ <td>Dec 27, 2012</td>
+ <td>56998</td>
+ </tr>
+ <tr>
+ <td>Jeanette</td>
+ <td class="name">Morales</td>
+ <td>Sharon</td>
+ <td>United Arab Emirates</td>
+ <td class="email">convallis@ipsumdolorsit.ca</td>
+ <td>Nov 10, 2012</td>
+ <td>88808</td>
+ </tr>
+ <tr>
+ <td>Oleg</td>
+ <td class="name">Day</td>
+ <td>Battle Creek</td>
+ <td>Guinea</td>
+ <td class="email">In.faucibus.Morbi@nonenim.ca</td>
+ <td>Feb 16, 2011</td>
+ <td>92338</td>
+ </tr>
+ <tr>
+ <td>Pascale</td>
+ <td class="name">Cooper</td>
+ <td>Livonia</td>
+ <td>Svalbard and Jan Mayen</td>
+ <td class="email">adipiscing@esttempor.edu</td>
+ <td>Mar 31, 2012</td>
+ <td>40378</td>
+ </tr>
+ <tr>
+ <td>Wyoming</td>
+ <td class="name">Odonnell</td>
+ <td>Wilmington</td>
+ <td>Seychelles</td>
+ <td class="email">id.mollis@lobortismaurisSuspendisse.edu</td>
+ <td>Dec 4, 2011</td>
+ <td>72703</td>
+ </tr>
+ <tr>
+ <td>Giselle</td>
+ <td class="name">Small</td>
+ <td>Vermillion</td>
+ <td>Iran, Islamic Republic of</td>
+ <td class="email">facilisis@ultricesposuerecubilia.edu</td>
+ <td>Aug 11, 2012</td>
+ <td>69244</td>
+ </tr>
+ <tr>
+ <td>Martena</td>
+ <td class="name">Valdez</td>
+ <td>Stamford</td>
+ <td>Cambodia</td>
+ <td class="email">cursus.Integer.mollis@pellentesque.org</td>
+ <td>Oct 31, 2011</td>
+ <td>36493</td>
+ </tr>
+ <tr>
+ <td>Leo</td>
+ <td class="name">Juarez</td>
+ <td>Wilmington</td>
+ <td>Mayotte</td>
+ <td class="email">imperdiet@arcuVivamussit.edu</td>
+ <td>Jul 26, 2010</td>
+ <td>85336</td>
+ </tr>
+ <tr>
+ <td>Reese</td>
+ <td class="name">Holden</td>
+ <td>Pembroke Pines</td>
+ <td>Puerto Rico</td>
+ <td class="email">id.enim.Curabitur@nec.org</td>
+ <td>Sep 9, 2012</td>
+ <td>54075</td>
+ </tr>
+ <tr>
+ <td>Ciaran</td>
+ <td class="name">Finley</td>
+ <td>Huntington Beach</td>
+ <td>Azerbaijan</td>
+ <td class="email">nulla.at@penatibus.com</td>
+ <td>Feb 20, 2010</td>
+ <td>69408</td>
+ </tr>
+ <tr>
+ <td>Ronan</td>
+ <td class="name">Adams</td>
+ <td>Cedar Rapids</td>
+ <td>Seychelles</td>
+ <td class="email">facilisis.non@Pellentesquetincidunt.org</td>
+ <td>Mar 3, 2012</td>
+ <td>51064</td>
+ </tr>
+ <tr>
+ <td>Bradley</td>
+ <td class="name">Frederick</td>
+ <td>Texas City</td>
+ <td>Slovakia</td>
+ <td class="email">pede@velitPellentesqueultricies.com</td>
+ <td>Dec 1, 2010</td>
+ <td>41919</td>
+ </tr>
+ <tr>
+ <td>Sean</td>
+ <td class="name">Jones</td>
+ <td>North Little Rock</td>
+ <td>Dominica</td>
+ <td class="email">cursus.Integer@parturientmontes.org</td>
+ <td>Aug 2, 2010</td>
+ <td>83748</td>
+ </tr>
+ <tr>
+ <td>Garrett</td>
+ <td class="name">Henry</td>
+ <td>Seattle</td>
+ <td>Lebanon</td>
+ <td class="email">malesuada@idanteNunc.org</td>
+ <td>Jul 30, 2011</td>
+ <td>48446</td>
+ </tr>
+ <tr>
+ <td>Althea</td>
+ <td class="name">Robertson</td>
+ <td>Reading</td>
+ <td>Uganda</td>
+ <td class="email">lorem.tristique@lectusjusto.edu</td>
+ <td>Feb 10, 2012</td>
+ <td>94806</td>
+ </tr>
+ <tr>
+ <td>Matthew</td>
+ <td class="name">Webster</td>
+ <td>Jacksonville</td>
+ <td>Finland</td>
+ <td class="email">arcu@magnatellus.org</td>
+ <td>Oct 21, 2012</td>
+ <td>97297</td>
+ </tr>
+ <tr>
+ <td>Ignacia</td>
+ <td class="name">Wood</td>
+ <td>Healdsburg</td>
+ <td>Dominica</td>
+ <td class="email">et.rutrum@dignissimMaecenas.edu</td>
+ <td>Dec 28, 2012</td>
+ <td>37242</td>
+ </tr>
+ <tr>
+ <td>Risa</td>
+ <td class="name">Conway</td>
+ <td>Bethlehem</td>
+ <td>Malta</td>
+ <td class="email">lorem@consectetuer.ca</td>
+ <td>Apr 23, 2011</td>
+ <td>48783</td>
+ </tr>
+ <tr>
+ <td>Olympia</td>
+ <td class="name">Merrill</td>
+ <td>Hidden Hills</td>
+ <td>Cambodia</td>
+ <td class="email">ante.Nunc.mauris@nibh.edu</td>
+ <td>Jan 21, 2012</td>
+ <td>78313</td>
+ </tr>
+ <tr>
+ <td>Dennis</td>
+ <td class="name">Mclaughlin</td>
+ <td>Reno</td>
+ <td>Nicaragua</td>
+ <td class="email">neque.Sed.eget@molestie.org</td>
+ <td>Aug 28, 2012</td>
+ <td>43970</td>
+ </tr>
+ <tr>
+ <td>Ray</td>
+ <td class="name">Head</td>
+ <td>Monongahela</td>
+ <td>Tajikistan</td>
+ <td class="email">Donec.est.Nunc@litoratorquent.com</td>
+ <td>May 30, 2010</td>
+ <td>55532</td>
+ </tr>
+ <tr>
+ <td>Nayda</td>
+ <td class="name">Crawford</td>
+ <td>Cairo</td>
+ <td>Barbados</td>
+ <td class="email">a.scelerisque@sodalespurus.com</td>
+ <td>Jun 9, 2012</td>
+ <td>86208</td>
+ </tr>
+ <tr>
+ <td>Dalton</td>
+ <td class="name">Mcdowell</td>
+ <td>Kettering</td>
+ <td>Virgin Islands, U.S.</td>
+ <td class="email">arcu@sit.ca</td>
+ <td>Jun 1, 2012</td>
+ <td>81139</td>
+ </tr>
+ <tr>
+ <td>Sacha</td>
+ <td class="name">Mathis</td>
+ <td>Concord</td>
+ <td>Hungary</td>
+ <td class="email">nec.cursus@tellus.com</td>
+ <td>Mar 14, 2010</td>
+ <td>62233</td>
+ </tr>
+ </tbody>
+ </table>
+
+</body>
+</html>
diff --git a/stupidtable.js b/stupidtable.js
new file mode 100644
index 0000000..851ba4c
--- /dev/null
+++ b/stupidtable.js
@@ -0,0 +1,135 @@
+// Stupid jQuery table plugin.
+
+(function($) {
+ $.fn.stupidtable = function(sortFns) {
+ return this.each(function() {
+ var $table = $(this);
+ sortFns = sortFns || {};
+ sortFns = $.extend({}, $.fn.stupidtable.default_sort_fns, sortFns);
+ $table.data('sortFns', sortFns);
+
+ $table.on("click.stupidtable", "thead th", function() {
+ $(this).stupidsort();
+ });
+ });
+ };
+
+
+ // Expects $("#mytable").stupidtable() to have already been called.
+ // Call on a table header.
+ $.fn.stupidsort = function(force_direction){
+ var $this_th = $(this);
+ var th_index = 0; // we'll increment this soon
+ var dir = $.fn.stupidtable.dir;
+ var $table = $this_th.closest("table");
+ var datatype = $this_th.data("sort") || null;
+
+ // No datatype? Nothing to do.
+ if (datatype === null) {
+ return;
+ }
+
+ // Account for colspans
+ $this_th.parents("tr").find("th").slice(0, $(this).index()).each(function() {
+ var cols = $(this).attr("colspan") || 1;
+ th_index += parseInt(cols,10);
+ });
+
+ var sort_dir;
+ if(arguments.length == 1){
+ sort_dir = force_direction;
+ }
+ else{
+ sort_dir = force_direction || $this_th.data("sort-default") || dir.ASC;
+ if ($this_th.data("sort-dir"))
+ sort_dir = $this_th.data("sort-dir") === dir.ASC ? dir.DESC : dir.ASC;
+ }
+
+
+ $table.trigger("beforetablesort", {column: th_index, direction: sort_dir});
+
+ // More reliable method of forcing a redraw
+ $table.css("display");
+
+ // Run sorting asynchronously on a timout to force browser redraw after
+ // `beforetablesort` callback. Also avoids locking up the browser too much.
+ setTimeout(function() {
+ // Gather the elements for this column
+ var column = [];
+ var sortFns = $table.data('sortFns');
+ var sortMethod = sortFns[datatype];
+ var trs = $table.children("tbody").children("tr");
+
+ // Extract the data for the column that needs to be sorted and pair it up
+ // with the TR itself into a tuple. This way sorting the values will
+ // incidentally sort the trs.
+ trs.each(function(index,tr) {
+ var $e = $(tr).children().eq(th_index);
+ var sort_val = $e.data("sort-value");
+
+ // Store and read from the .data cache for display text only sorts
+ // instead of looking through the DOM every time
+ if(typeof(sort_val) === "undefined"){
+ var txt = $e.text();
+ $e.data('sort-value', txt);
+ sort_val = txt;
+ }
+ column.push([sort_val, tr]);
+ });
+
+ // Sort by the data-order-by value
+ column.sort(function(a, b) { return sortMethod(a[0], b[0]); });
+ if (sort_dir != dir.ASC)
+ column.reverse();
+
+ // Replace the content of tbody with the sorted rows. Strangely
+ // enough, .append accomplishes this for us.
+ trs = $.map(column, function(kv) { return kv[1]; });
+ $table.children("tbody").append(trs);
+
+ // Reset siblings
+ $table.find("th").data("sort-dir", null).removeClass("sorting-desc sorting-asc");
+ $this_th.data("sort-dir", sort_dir).addClass("sorting-"+sort_dir);
+
+ $table.trigger("aftertablesort", {column: th_index, direction: sort_dir});
+ $table.css("display");
+ }, 10);
+
+ return $this_th;
+ };
+
+ // Call on a sortable td to update its value in the sort. This should be the
+ // only mechanism used to update a cell's sort value. If your display value is
+ // different from your sort value, use jQuery's .text() or .html() to update
+ // the td contents, Assumes stupidtable has already been called for the table.
+ $.fn.updateSortVal = function(new_sort_val){
+ var $this_td = $(this);
+ if($this_td.is('[data-sort-value]')){
+ // For visual consistency with the .data cache
+ $this_td.attr('data-sort-value', new_sort_val);
+ }
+ $this_td.data("sort-value", new_sort_val);
+ return $this_td;
+ };
+
+ // ------------------------------------------------------------------
+ // Default settings
+ // ------------------------------------------------------------------
+ $.fn.stupidtable.dir = {ASC: "asc", DESC: "desc"};
+ $.fn.stupidtable.default_sort_fns = {
+ "int": function(a, b) {
+ return parseInt(a, 10) - parseInt(b, 10);
+ },
+ "float": function(a, b) {
+ return parseFloat(a) - parseFloat(b);
+ },
+ "string": function(a, b) {
+ return a.localeCompare(b);
+ },
+ "string-ins": function(a, b) {
+ a = a.toLocaleLowerCase();
+ b = b.toLocaleLowerCase();
+ return a.localeCompare(b);
+ }
+ };
+})(jQuery);
diff --git a/tests/qunit.css b/tests/qunit.css
new file mode 100644
index 0000000..1d9d70e
--- /dev/null
+++ b/tests/qunit.css
@@ -0,0 +1,260 @@
+/**
+ * QUnit v1.12.0 - A JavaScript Unit Testing Framework
+ *
+ * http://qunitjs.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+/** Font Family and Sizes */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
+ font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
+}
+
+#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
+#qunit-tests { font-size: smaller; }
+
+
+/** Resets */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
+ margin: 0;
+ padding: 0;
+}
+
+
+/** Header */
+
+#qunit-header {
+ padding: 0.5em 0 0.5em 1em;
+
+ color: #8699a4;
+ background-color: #0d3349;
+
+ font-size: 1.5em;
+ line-height: 1em;
+ font-weight: normal;
+
+ border-radius: 5px 5px 0 0;
+ -moz-border-radius: 5px 5px 0 0;
+ -webkit-border-top-right-radius: 5px;
+ -webkit-border-top-left-radius: 5px;
+}
+
+#qunit-header a {
+ text-decoration: none;
+ color: #c2ccd1;
+}
+
+#qunit-header a:hover,
+#qunit-header a:focus {
+ color: #fff;
+}
+
+#qunit-testrunner-toolbar label {
+ display: inline-block;
+ padding: 0 .5em 0 .1em;
+}
+
+#qunit-banner {
+ height: 5px;
+}
+
+#qunit-testrunner-toolbar {
+ padding: 0.5em 0 0.5em 2em;
+ color: #5E740B;
+ background-color: #eee;
+ overflow: hidden;
+}
+
+#qunit-userAgent {
+ padding: 0.5em 0 0.5em 2.5em;
+ background-color: #2b81af;
+ color: #fff;
+ text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
+}
+
+#qunit-modulefilter-container {
+ float: right;
+}
+
+/** Tests: Pass/Fail */
+
+#qunit-tests {
+ list-style-position: inside;
+}
+
+#qunit-tests li {
+ padding: 0.4em 0.5em 0.4em 2.5em;
+ border-bottom: 1px solid #fff;
+ list-style-position: inside;
+}
+
+#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
+ display: none;
+}
+
+#qunit-tests li strong {
+ cursor: pointer;
+}
+
+#qunit-tests li a {
+ padding: 0.5em;
+ color: #c2ccd1;
+ text-decoration: none;
+}
+#qunit-tests li a:hover,
+#qunit-tests li a:focus {
+ color: #000;
+}
+
+#qunit-tests li .runtime {
+ float: right;
+ font-size: smaller;
+}
+
+.qunit-assert-list {
+ margin-top: 0.5em;
+ padding: 0.5em;
+
+ background-color: #fff;
+
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+}
+
+.qunit-collapsed {
+ display: none;
+}
+
+#qunit-tests table {
+ border-collapse: collapse;
+ margin-top: .2em;
+}
+
+#qunit-tests th {
+ text-align: right;
+ vertical-align: top;
+ padding: 0 .5em 0 0;
+}
+
+#qunit-tests td {
+ vertical-align: top;
+}
+
+#qunit-tests pre {
+ margin: 0;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+}
+
+#qunit-tests del {
+ background-color: #e0f2be;
+ color: #374e0c;
+ text-decoration: none;
+}
+
+#qunit-tests ins {
+ background-color: #ffcaca;
+ color: #500;
+ text-decoration: none;
+}
+
+/*** Test Counts */
+
+#qunit-tests b.counts { color: black; }
+#qunit-tests b.passed { color: #5E740B; }
+#qunit-tests b.failed { color: #710909; }
+
+#qunit-tests li li {
+ padding: 5px;
+ background-color: #fff;
+ border-bottom: none;
+ list-style-position: inside;
+}
+
+/*** Passing Styles */
+
+#qunit-tests li li.pass {
+ color: #3c510c;
+ background-color: #fff;
+ border-left: 10px solid #C6E746;
+}
+
+#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
+#qunit-tests .pass .test-name { color: #366097; }
+
+#qunit-tests .pass .test-actual,
+#qunit-tests .pass .test-expected { color: #999999; }
+
+#qunit-banner.qunit-pass { background-color: #C6E746; }
+
+/*** Failing Styles */
+
+#qunit-tests li li.fail {
+ color: #710909;
+ background-color: #fff;
+ border-left: 10px solid #EE5757;
+ white-space: pre;
+}
+
+#qunit-tests > li:last-child {
+ border-radius: 0 0 5px 5px;
+ -moz-border-radius: 0 0 5px 5px;
+ -webkit-border-bottom-right-radius: 5px;
+ -webkit-border-bottom-left-radius: 5px;
+}
+
+#qunit-tests .fail { color: #000000; background-color: #EE5757; }
+#qunit-tests .fail .test-name,
+#qunit-tests .fail .module-name { color: #000000; }
+
+#qunit-tests .fail .test-actual { color: #EE5757; }
+#qunit-tests .fail .test-expected { color: green; }
+
+#qunit-banner.qunit-fail { background-color: #EE5757; }
+
+
+/** Result */
+
+#qunit-testresult {
+ padding: 0.5em 0.5em 0.5em 2.5em;
+
+ color: #2b81af;
+ background-color: #D2E0E6;
+
+ border-bottom: 1px solid white;
+}
+#qunit-testresult .module-name {
+ font-weight: bold;
+}
+
+/** Fixture */
+
+
+/* Custom styles */
+table {
+ border-collapse: collapse;
+}
+th, td {
+ padding: 5px 10px;
+ border: 1px solid #999;
+}
+th {
+ background-color: #eee;
+}
+th[data-sort]{
+ cursor:pointer;
+}
+
+.test-hidden {
+ position: absolute;
+ top: -10000px;
+ left: -10000px;
+ width: 1000px;
+ height: 1000px;
+}
diff --git a/tests/qunit.js b/tests/qunit.js
new file mode 100644
index 0000000..84c7390
--- /dev/null
+++ b/tests/qunit.js
@@ -0,0 +1,2212 @@
+/**
+ * QUnit v1.12.0 - A JavaScript Unit Testing Framework
+ *
+ * http://qunitjs.com
+ *
+ * Copyright 2013 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * https://jquery.org/license/
+ */
+
+(function( window ) {
+
+var QUnit,
+ assert,
+ config,
+ onErrorFnPrev,
+ testId = 0,
+ fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
+ toString = Object.prototype.toString,
+ hasOwn = Object.prototype.hasOwnProperty,
+ // Keep a local reference to Date (GH-283)
+ Date = window.Date,
+ setTimeout = window.setTimeout,
+ defined = {
+ setTimeout: typeof window.setTimeout !== "undefined",
+ sessionStorage: (function() {
+ var x = "qunit-test-string";
+ try {
+ sessionStorage.setItem( x, x );
+ sessionStorage.removeItem( x );
+ return true;
+ } catch( e ) {
+ return false;
+ }
+ }())
+ },
+ /**
+ * Provides a normalized error string, correcting an issue
+ * with IE 7 (and prior) where Error.prototype.toString is
+ * not properly implemented
+ *
+ * Based on http://es5.github.com/#x15.11.4.4
+ *
+ * @param {String|Error} error
+ * @return {String} error message
+ */
+ errorString = function( error ) {
+ var name, message,
+ errorString = error.toString();
+ if ( errorString.substring( 0, 7 ) === "[object" ) {
+ name = error.name ? error.name.toString() : "Error";
+ message = error.message ? error.message.toString() : "";
+ if ( name && message ) {
+ return name + ": " + message;
+ } else if ( name ) {
+ return name;
+ } else if ( message ) {
+ return message;
+ } else {
+ return "Error";
+ }
+ } else {
+ return errorString;
+ }
+ },
+ /**
+ * Makes a clone of an object using only Array or Object as base,
+ * and copies over the own enumerable properties.
+ *
+ * @param {Object} obj
+ * @return {Object} New object with only the own properties (recursively).
+ */
+ objectValues = function( obj ) {
+ // Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392.
+ /*jshint newcap: false */
+ var key, val,
+ vals = QUnit.is( "array", obj ) ? [] : {};
+ for ( key in obj ) {
+ if ( hasOwn.call( obj, key ) ) {
+ val = obj[key];
+ vals[key] = val === Object(val) ? objectValues(val) : val;
+ }
+ }
+ return vals;
+ };
+
+function Test( settings ) {
+ extend( this, settings );
+ this.assertions = [];
+ this.testNumber = ++Test.count;
+}
+
+Test.count = 0;
+
+Test.prototype = {
+ init: function() {
+ var a, b, li,
+ tests = id( "qunit-tests" );
+
+ if ( tests ) {
+ b = document.createElement( "strong" );
+ b.innerHTML = this.nameHtml;
+
+ // `a` initialized at top of scope
+ a = document.createElement( "a" );
+ a.innerHTML = "Rerun";
+ a.href = QUnit.url({ testNumber: this.testNumber });
+
+ li = document.createElement( "li" );
+ li.appendChild( b );
+ li.appendChild( a );
+ li.className = "running";
+ li.id = this.id = "qunit-test-output" + testId++;
+
+ tests.appendChild( li );
+ }
+ },
+ setup: function() {
+ if (
+ // Emit moduleStart when we're switching from one module to another
+ this.module !== config.previousModule ||
+ // They could be equal (both undefined) but if the previousModule property doesn't
+ // yet exist it means this is the first test in a suite that isn't wrapped in a
+ // module, in which case we'll just emit a moduleStart event for 'undefined'.
+ // Without this, reporters can get testStart before moduleStart which is a problem.
+ !hasOwn.call( config, "previousModule" )
+ ) {
+ if ( hasOwn.call( config, "previousModule" ) ) {
+ runLoggingCallbacks( "moduleDone", QUnit, {
+ name: config.previousModule,
+ failed: config.moduleStats.bad,
+ passed: config.moduleStats.all - config.moduleStats.bad,
+ total: config.moduleStats.all
+ });
+ }
+ config.previousModule = this.module;
+ config.moduleStats = { all: 0, bad: 0 };
+ runLoggingCallbacks( "moduleStart", QUnit, {
+ name: this.module
+ });
+ }
+
+ config.current = this;
+
+ this.testEnvironment = extend({
+ setup: function() {},
+ teardown: function() {}
+ }, this.moduleTestEnvironment );
+
+ this.started = +new Date();
+ runLoggingCallbacks( "testStart", QUnit, {
+ name: this.testName,
+ module: this.module
+ });
+
+ /*jshint camelcase:false */
+
+
+ /**
+ * Expose the current test environment.
+ *
+ * @deprecated since 1.12.0: Use QUnit.config.current.testEnvironment instead.
+ */
+ QUnit.current_testEnvironment = this.testEnvironment;
+
+ /*jshint camelcase:true */
+
+ if ( !config.pollution ) {
+ saveGlobal();
+ }
+ if ( config.notrycatch ) {
+ this.testEnvironment.setup.call( this.testEnvironment, QUnit.assert );
+ return;
+ }
+ try {
+ this.testEnvironment.setup.call( this.testEnvironment, QUnit.assert );
+ } catch( e ) {
+ QUnit.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
+ }
+ },
+ run: function() {
+ config.current = this;
+
+ var running = id( "qunit-testresult" );
+
+ if ( running ) {
+ running.innerHTML = "Running: <br/>" + this.nameHtml;
+ }
+
+ if ( this.async ) {
+ QUnit.stop();
+ }
+
+ this.callbackStarted = +new Date();
+
+ if ( config.notrycatch ) {
+ this.callback.call( this.testEnvironment, QUnit.assert );
+ this.callbackRuntime = +new Date() - this.callbackStarted;
+ return;
+ }
+
+ try {
+ this.callback.call( this.testEnvironment, QUnit.assert );
+ this.callbackRuntime = +new Date() - this.callbackStarted;
+ } catch( e ) {
+ this.callbackRuntime = +new Date() - this.callbackStarted;
+
+ QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
+ // else next test will carry the responsibility
+ saveGlobal();
+
+ // Restart the tests if they're blocking
+ if ( config.blocking ) {
+ QUnit.start();
+ }
+ }
+ },
+ teardown: function() {
+ config.current = this;
+ if ( config.notrycatch ) {
+ if ( typeof this.callbackRuntime === "undefined" ) {
+ this.callbackRuntime = +new Date() - this.callbackStarted;
+ }
+ this.testEnvironment.teardown.call( this.testEnvironment, QUnit.assert );
+ return;
+ } else {
+ try {
+ this.testEnvironment.teardown.call( this.testEnvironment, QUnit.assert );
+ } catch( e ) {
+ QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
+ }
+ }
+ checkPollution();
+ },
+ finish: function() {
+ config.current = this;
+ if ( config.requireExpects && this.expected === null ) {
+ QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack );
+ } else if ( this.expected !== null && this.expected !== this.assertions.length ) {
+ QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack );
+ } else if ( this.expected === null && !this.assertions.length ) {
+ QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack );
+ }
+
+ var i, assertion, a, b, time, li, ol,
+ test = this,
+ good = 0,
+ bad = 0,
+ tests = id( "qunit-tests" );
+
+ this.runtime = +new Date() - this.started;
+ config.stats.all += this.assertions.length;
+ config.moduleStats.all += this.assertions.length;
+
+ if ( tests ) {
+ ol = document.createElement( "ol" );
+ ol.className = "qunit-assert-list";
+
+ for ( i = 0; i < this.assertions.length; i++ ) {
+ assertion = this.assertions[i];
+
+ li = document.createElement( "li" );
+ li.className = assertion.result ? "pass" : "fail";
+ li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" );
+ ol.appendChild( li );
+
+ if ( assertion.result ) {
+ good++;
+ } else {
+ bad++;
+ config.stats.bad++;
+ config.moduleStats.bad++;
+ }
+ }
+
+ // store result when possible
+ if ( QUnit.config.reorder && defined.sessionStorage ) {
+ if ( bad ) {
+ sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad );
+ } else {
+ sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName );
+ }
+ }
+
+ if ( bad === 0 ) {
+ addClass( ol, "qunit-collapsed" );
+ }
+
+ // `b` initialized at top of scope
+ b = document.createElement( "strong" );
+ b.innerHTML = this.nameHtml + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
+
+ addEvent(b, "click", function() {
+ var next = b.parentNode.lastChild,
+ collapsed = hasClass( next, "qunit-collapsed" );
+ ( collapsed ? removeClass : addClass )( next, "qunit-collapsed" );
+ });
+
+ addEvent(b, "dblclick", function( e ) {
+ var target = e && e.target ? e.target : window.event.srcElement;
+ if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) {
+ target = target.parentNode;
+ }
+ if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
+ window.location = QUnit.url({ testNumber: test.testNumber });
+ }
+ });
+
+ // `time` initialized at top of scope
+ time = document.createElement( "span" );
+ time.className = "runtime";
+ time.innerHTML = this.runtime + " ms";
+
+ // `li` initialized at top of scope
+ li = id( this.id );
+ li.className = bad ? "fail" : "pass";
+ li.removeChild( li.firstChild );
+ a = li.firstChild;
+ li.appendChild( b );
+ li.appendChild( a );
+ li.appendChild( time );
+ li.appendChild( ol );
+
+ } else {
+ for ( i = 0; i < this.assertions.length; i++ ) {
+ if ( !this.assertions[i].result ) {
+ bad++;
+ config.stats.bad++;
+ config.moduleStats.bad++;
+ }
+ }
+ }
+
+ runLoggingCallbacks( "testDone", QUnit, {
+ name: this.testName,
+ module: this.module,
+ failed: bad,
+ passed: this.assertions.length - bad,
+ total: this.assertions.length,
+ duration: this.runtime
+ });
+
+ QUnit.reset();
+
+ config.current = undefined;
+ },
+
+ queue: function() {
+ var bad,
+ test = this;
+
+ synchronize(function() {
+ test.init();
+ });
+ function run() {
+ // each of these can by async
+ synchronize(function() {
+ test.setup();
+ });
+ synchronize(function() {
+ test.run();
+ });
+ synchronize(function() {
+ test.teardown();
+ });
+ synchronize(function() {
+ test.finish();
+ });
+ }
+
+ // `bad` initialized at top of scope
+ // defer when previous test run passed, if storage is available
+ bad = QUnit.config.reorder && defined.sessionStorage &&
+ +sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName );
+
+ if ( bad ) {
+ run();
+ } else {
+ synchronize( run, true );
+ }
+ }
+};
+
+// Root QUnit object.
+// `QUnit` initialized at top of scope
+QUnit = {
+
+ // call on start of module test to prepend name to all tests
+ module: function( name, testEnvironment ) {
+ config.currentModule = name;
+ config.currentModuleTestEnvironment = testEnvironment;
+ config.modules[name] = true;
+ },
+
+ asyncTest: function( testName, expected, callback ) {
+ if ( arguments.length === 2 ) {
+ callback = expected;
+ expected = null;
+ }
+
+ QUnit.test( testName, expected, callback, true );
+ },
+
+ test: function( testName, expected, callback, async ) {
+ var test,
+ nameHtml = "<span class='test-name'>" + escapeText( testName ) + "</span>";
+
+ if ( arguments.length === 2 ) {
+ callback = expected;
+ expected = null;
+ }
+
+ if ( config.currentModule ) {
+ nameHtml = "<span class='module-name'>" + escapeText( config.currentModule ) + "</span>: " + nameHtml;
+ }
+
+ test = new Test({
+ nameHtml: nameHtml,
+ testName: testName,
+ expected: expected,
+ async: async,
+ callback: callback,
+ module: config.currentModule,
+ moduleTestEnvironment: config.currentModuleTestEnvironment,
+ stack: sourceFromStacktrace( 2 )
+ });
+
+ if ( !validTest( test ) ) {
+ return;
+ }
+
+ test.queue();
+ },
+
+ // Specify the number of expected assertions to guarantee that failed test (no assertions are run at all) don't slip through.
+ expect: function( asserts ) {
+ if (arguments.length === 1) {
+ config.current.expected = asserts;
+ } else {
+ return config.current.expected;
+ }
+ },
+
+ start: function( count ) {
+ // QUnit hasn't been initialized yet.
+ // Note: RequireJS (et al) may delay onLoad
+ if ( config.semaphore === undefined ) {
+ QUnit.begin(function() {
+ // This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first
+ setTimeout(function() {
+ QUnit.start( count );
+ });
+ });
+ return;
+ }
+
+ config.semaphore -= count || 1;
+ // don't start until equal number of stop-calls
+ if ( config.semaphore > 0 ) {
+ return;
+ }
+ // ignore if start is called more often then stop
+ if ( config.semaphore < 0 ) {
+ config.semaphore = 0;
+ QUnit.pushFailure( "Called start() while already started (QUnit.config.semaphore was 0 already)", null, sourceFromStacktrace(2) );
+ return;
+ }
+ // A slight delay, to avoid any current callbacks
+ if ( defined.setTimeout ) {
+ setTimeout(function() {
+ if ( config.semaphore > 0 ) {
+ return;
+ }
+ if ( config.timeout ) {
+ clearTimeout( config.timeout );
+ }
+
+ config.blocking = false;
+ process( true );
+ }, 13);
+ } else {
+ config.blocking = false;
+ process( true );
+ }
+ },
+
+ stop: function( count ) {
+ config.semaphore += count || 1;
+ config.blocking = true;
+
+ if ( config.testTimeout && defined.setTimeout ) {
+ clearTimeout( config.timeout );
+ config.timeout = setTimeout(function() {
+ QUnit.ok( false, "Test timed out" );
+ config.semaphore = 1;
+ QUnit.start();
+ }, config.testTimeout );
+ }
+ }
+};
+
+// `assert` initialized at top of scope
+// Assert helpers
+// All of these must either call QUnit.push() or manually do:
+// - runLoggingCallbacks( "log", .. );
+// - config.current.assertions.push({ .. });
+// We attach it to the QUnit object *after* we expose the public API,
+// otherwise `assert` will become a global variable in browsers (#341).
+assert = {
+ /**
+ * Asserts rough true-ish result.
+ * @name ok
+ * @function
+ * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
+ */
+ ok: function( result, msg ) {
+ if ( !config.current ) {
+ throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) );
+ }
+ result = !!result;
+ msg = msg || (result ? "okay" : "failed" );
+
+ var source,
+ details = {
+ module: config.current.module,
+ name: config.current.testName,
+ result: result,
+ message: msg
+ };
+
+ msg = "<span class='test-message'>" + escapeText( msg ) + "</span>";
+
+ if ( !result ) {
+ source = sourceFromStacktrace( 2 );
+ if ( source ) {
+ details.source = source;
+ msg += "<table><tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr></table>";
+ }
+ }
+ runLoggingCallbacks( "log", QUnit, details );
+ config.current.assertions.push({
+ result: result,
+ message: msg
+ });
+ },
+
+ /**
+ * Assert that the first two arguments are equal, with an optional message.
+ * Prints out both actual and expected values.
+ * @name equal
+ * @function
+ * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
+ */
+ equal: function( actual, expected, message ) {
+ /*jshint eqeqeq:false */
+ QUnit.push( expected == actual, actual, expected, message );
+ },
+
+ /**
+ * @name notEqual
+ * @function
+ */
+ notEqual: function( actual, expected, message ) {
+ /*jshint eqeqeq:false */
+ QUnit.push( expected != actual, actual, expected, message );
+ },
+
+ /**
+ * @name propEqual
+ * @function
+ */
+ propEqual: function( actual, expected, message ) {
+ actual = objectValues(actual);
+ expected = objectValues(expected);
+ QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
+ },
+
+ /**
+ * @name notPropEqual
+ * @function
+ */
+ notPropEqual: function( actual, expected, message ) {
+ actual = objectValues(actual);
+ expected = objectValues(expected);
+ QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
+ },
+
+ /**
+ * @name deepEqual
+ * @function
+ */
+ deepEqual: function( actual, expected, message ) {
+ QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
+ },
+
+ /**
+ * @name notDeepEqual
+ * @function
+ */
+ notDeepEqual: function( actual, expected, message ) {
+ QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
+ },
+
+ /**
+ * @name strictEqual
+ * @function
+ */
+ strictEqual: function( actual, expected, message ) {
+ QUnit.push( expected === actual, actual, expected, message );
+ },
+
+ /**
+ * @name notStrictEqual
+ * @function
+ */
+ notStrictEqual: function( actual, expected, message ) {
+ QUnit.push( expected !== actual, actual, expected, message );
+ },
+
+ "throws": function( block, expected, message ) {
+ var actual,
+ expectedOutput = expected,
+ ok = false;
+
+ // 'expected' is optional
+ if ( typeof expected === "string" ) {
+ message = expected;
+ expected = null;
+ }
+
+ config.current.ignoreGlobalErrors = true;
+ try {
+ block.call( config.current.testEnvironment );
+ } catch (e) {
+ actual = e;
+ }
+ config.current.ignoreGlobalErrors = false;
+
+ if ( actual ) {
+ // we don't want to validate thrown error
+ if ( !expected ) {
+ ok = true;
+ expectedOutput = null;
+ // expected is a regexp
+ } else if ( QUnit.objectType( expected ) === "regexp" ) {
+ ok = expected.test( errorString( actual ) );
+ // expected is a constructor
+ } else if ( actual instanceof expected ) {
+ ok = true;
+ // expected is a validation function which returns true is validation passed
+ } else if ( expected.call( {}, actual ) === true ) {
+ expectedOutput = null;
+ ok = true;
+ }
+
+ QUnit.push( ok, actual, expectedOutput, message );
+ } else {
+ QUnit.pushFailure( message, null, "No exception was thrown." );
+ }
+ }
+};
+
+/**
+ * @deprecated since 1.8.0
+ * Kept assertion helpers in root for backwards compatibility.
+ */
+extend( QUnit, assert );
+
+/**
+ * @deprecated since 1.9.0
+ * Kept root "raises()" for backwards compatibility.
+ * (Note that we don't introduce assert.raises).
+ */
+QUnit.raises = assert[ "throws" ];
+
+/**
+ * @deprecated since 1.0.0, replaced with error pushes since 1.3.0
+ * Kept to avoid TypeErrors for undefined methods.
+ */
+QUnit.equals = function() {
+ QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" );
+};
+QUnit.same = function() {
+ QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" );
+};
+
+// We want access to the constructor's prototype
+(function() {
+ function F() {}
+ F.prototype = QUnit;
+ QUnit = new F();
+ // Make F QUnit's constructor so that we can add to the prototype later
+ QUnit.constructor = F;
+}());
+
+/**
+ * Config object: Maintain internal state
+ * Later exposed as QUnit.config
+ * `config` initialized at top of scope
+ */
+config = {
+ // The queue of tests to run
+ queue: [],
+
+ // block until document ready
+ blocking: true,
+
+ // when enabled, show only failing tests
+ // gets persisted through sessionStorage and can be changed in UI via checkbox
+ hidepassed: false,
+
+ // by default, run previously failed tests first
+ // very useful in combination with "Hide passed tests" checked
+ reorder: true,
+
+ // by default, modify document.title when suite is done
+ altertitle: true,
+
+ // when enabled, all tests must call expect()
+ requireExpects: false,
+
+ // add checkboxes that are persisted in the query-string
+ // when enabled, the id is set to `true` as a `QUnit.config` property
+ urlConfig: [
+ {
+ id: "noglobals",
+ label: "Check for Globals",
+ tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings."
+ },
+ {
+ id: "notrycatch",
+ label: "No try-catch",
+ tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings."
+ }
+ ],
+
+ // Set of all modules.
+ modules: {},
+
+ // logging callback queues
+ begin: [],
+ done: [],
+ log: [],
+ testStart: [],
+ testDone: [],
+ moduleStart: [],
+ moduleDone: []
+};
+
+// Export global variables, unless an 'exports' object exists,
+// in that case we assume we're in CommonJS (dealt with on the bottom of the script)
+if ( typeof exports === "undefined" ) {
+ extend( window, QUnit.constructor.prototype );
+
+ // Expose QUnit object
+ window.QUnit = QUnit;
+}
+
+// Initialize more QUnit.config and QUnit.urlParams
+(function() {
+ var i,
+ location = window.location || { search: "", protocol: "file:" },
+ params = location.search.slice( 1 ).split( "&" ),
+ length = params.length,
+ urlParams = {},
+ current;
+
+ if ( params[ 0 ] ) {
+ for ( i = 0; i < length; i++ ) {
+ current = params[ i ].split( "=" );
+ current[ 0 ] = decodeURIComponent( current[ 0 ] );
+ // allow just a key to turn on a flag, e.g., test.html?noglobals
+ current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
+ urlParams[ current[ 0 ] ] = current[ 1 ];
+ }
+ }
+
+ QUnit.urlParams = urlParams;
+
+ // String search anywhere in moduleName+testName
+ config.filter = urlParams.filter;
+
+ // Exact match of the module name
+ config.module = urlParams.module;
+
+ config.testNumber = parseInt( urlParams.testNumber, 10 ) || null;
+
+ // Figure out if we're running the tests from a server or not
+ QUnit.isLocal = location.protocol === "file:";
+}());
+
+// Extend QUnit object,
+// these after set here because they should not be exposed as global functions
+extend( QUnit, {
+ assert: assert,
+
+ config: config,
+
+ // Initialize the configuration options
+ init: function() {
+ extend( config, {
+ stats: { all: 0, bad: 0 },
+ moduleStats: { all: 0, bad: 0 },
+ started: +new Date(),
+ updateRate: 1000,
+ blocking: false,
+ autostart: true,
+ autorun: false,
+ filter: "",
+ queue: [],
+ semaphore: 1
+ });
+
+ var tests, banner, result,
+ qunit = id( "qunit" );
+
+ if ( qunit ) {
+ qunit.innerHTML =
+ "<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
+ "<h2 id='qunit-banner'></h2>" +
+ "<div id='qunit-testrunner-toolbar'></div>" +
+ "<h2 id='qunit-userAgent'></h2>" +
+ "<ol id='qunit-tests'></ol>";
+ }
+
+ tests = id( "qunit-tests" );
+ banner = id( "qunit-banner" );
+ result = id( "qunit-testresult" );
+
+ if ( tests ) {
+ tests.innerHTML = "";
+ }
+
+ if ( banner ) {
+ banner.className = "";
+ }
+
+ if ( result ) {
+ result.parentNode.removeChild( result );
+ }
+
+ if ( tests ) {
+ result = document.createElement( "p" );
+ result.id = "qunit-testresult";
+ result.className = "result";
+ tests.parentNode.insertBefore( result, tests );
+ result.innerHTML = "Running...<br/> ";
+ }
+ },
+
+ // Resets the test setup. Useful for tests that modify the DOM.
+ /*
+ DEPRECATED: Use multiple tests instead of resetting inside a test.
+ Use testStart or testDone for custom cleanup.
+ This method will throw an error in 2.0, and will be removed in 2.1
+ */
+ reset: function() {
+ var fixture = id( "qunit-fixture" );
+ if ( fixture ) {
+ fixture.innerHTML = config.fixture;
+ }
+ },
+
+ // Trigger an event on an element.
+ // @example triggerEvent( document.body, "click" );
+ triggerEvent: function( elem, type, event ) {
+ if ( document.createEvent ) {
+ event = document.createEvent( "MouseEvents" );
+ event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
+ 0, 0, 0, 0, 0, false, false, false, false, 0, null);
+
+ elem.dispatchEvent( event );
+ } else if ( elem.fireEvent ) {
+ elem.fireEvent( "on" + type );
+ }
+ },
+
+ // Safe object type checking
+ is: function( type, obj ) {
+ return QUnit.objectType( obj ) === type;
+ },
+
+ objectType: function( obj ) {
+ if ( typeof obj === "undefined" ) {
+ return "undefined";
+ // consider: typeof null === object
+ }
+ if ( obj === null ) {
+ return "null";
+ }
+
+ var match = toString.call( obj ).match(/^\[object\s(.*)\]$/),
+ type = match && match[1] || "";
+
+ switch ( type ) {
+ case "Number":
+ if ( isNaN(obj) ) {
+ return "nan";
+ }
+ return "number";
+ case "String":
+ case "Boolean":
+ case "Array":
+ case "Date":
+ case "RegExp":
+ case "Function":
+ return type.toLowerCase();
+ }
+ if ( typeof obj === "object" ) {
+ return "object";
+ }
+ return undefined;
+ },
+
+ push: function( result, actual, expected, message ) {
+ if ( !config.current ) {
+ throw new Error( "assertion outside test context, was " + sourceFromStacktrace() );
+ }
+
+ var output, source,
+ details = {
+ module: config.current.module,
+ name: config.current.testName,
+ result: result,
+ message: message,
+ actual: actual,
+ expected: expected
+ };
+
+ message = escapeText( message ) || ( result ? "okay" : "failed" );
+ message = "<span class='test-message'>" + message + "</span>";
+ output = message;
+
+ if ( !result ) {
+ expected = escapeText( QUnit.jsDump.parse(expected) );
+ actual = escapeText( QUnit.jsDump.parse(actual) );
+ output += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" + expected + "</pre></td></tr>";
+
+ if ( actual !== expected ) {
+ output += "<tr class='test-actual'><th>Result: </th><td><pre>" + actual + "</pre></td></tr>";
+ output += "<tr class='test-diff'><th>Diff: </th><td><pre>" + QUnit.diff( expected, actual ) + "</pre></td></tr>";
+ }
+
+ source = sourceFromStacktrace();
+
+ if ( source ) {
+ details.source = source;
+ output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
+ }
+
+ output += "</table>";
+ }
+
+ runLoggingCallbacks( "log", QUnit, details );
+
+ config.current.assertions.push({
+ result: !!result,
+ message: output
+ });
+ },
+
+ pushFailure: function( message, source, actual ) {
+ if ( !config.current ) {
+ throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) );
+ }
+
+ var output,
+ details = {
+ module: config.current.module,
+ name: config.current.testName,
+ result: false,
+ message: message
+ };
+
+ message = escapeText( message ) || "error";
+ message = "<span class='test-message'>" + message + "</span>";
+ output = message;
+
+ output += "<table>";
+
+ if ( actual ) {
+ output += "<tr class='test-actual'><th>Result: </th><td><pre>" + escapeText( actual ) + "</pre></td></tr>";
+ }
+
+ if ( source ) {
+ details.source = source;
+ output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
+ }
+
+ output += "</table>";
+
+ runLoggingCallbacks( "log", QUnit, details );
+
+ config.current.assertions.push({
+ result: false,
+ message: output
+ });
+ },
+
+ url: function( params ) {
+ params = extend( extend( {}, QUnit.urlParams ), params );
+ var key,
+ querystring = "?";
+
+ for ( key in params ) {
+ if ( hasOwn.call( params, key ) ) {
+ querystring += encodeURIComponent( key ) + "=" +
+ encodeURIComponent( params[ key ] ) + "&";
+ }
+ }
+ return window.location.protocol + "//" + window.location.host +
+ window.location.pathname + querystring.slice( 0, -1 );
+ },
+
+ extend: extend,
+ id: id,
+ addEvent: addEvent,
+ addClass: addClass,
+ hasClass: hasClass,
+ removeClass: removeClass
+ // load, equiv, jsDump, diff: Attached later
+});
+
+/**
+ * @deprecated: Created for backwards compatibility with test runner that set the hook function
+ * into QUnit.{hook}, instead of invoking it and passing the hook function.
+ * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here.
+ * Doing this allows us to tell if the following methods have been overwritten on the actual
+ * QUnit object.
+ */
+extend( QUnit.constructor.prototype, {
+
+ // Logging callbacks; all receive a single argument with the listed properties
+ // run test/logs.html for any related changes
+ begin: registerLoggingCallback( "begin" ),
+
+ // done: { failed, passed, total, runtime }
+ done: registerLoggingCallback( "done" ),
+
+ // log: { result, actual, expected, message }
+ log: registerLoggingCallback( "log" ),
+
+ // testStart: { name }
+ testStart: registerLoggingCallback( "testStart" ),
+
+ // testDone: { name, failed, passed, total, duration }
+ testDone: registerLoggingCallback( "testDone" ),
+
+ // moduleStart: { name }
+ moduleStart: registerLoggingCallback( "moduleStart" ),
+
+ // moduleDone: { name, failed, passed, total }
+ moduleDone: registerLoggingCallback( "moduleDone" )
+});
+
+if ( typeof document === "undefined" || document.readyState === "complete" ) {
+ config.autorun = true;
+}
+
+QUnit.load = function() {
+ runLoggingCallbacks( "begin", QUnit, {} );
+
+ // Initialize the config, saving the execution queue
+ var banner, filter, i, label, len, main, ol, toolbar, userAgent, val,
+ urlConfigCheckboxesContainer, urlConfigCheckboxes, moduleFilter,
+ numModules = 0,
+ moduleNames = [],
+ moduleFilterHtml = "",
+ urlConfigHtml = "",
+ oldconfig = extend( {}, config );
+
+ QUnit.init();
+ extend(config, oldconfig);
+
+ config.blocking = false;
+
+ len = config.urlConfig.length;
+
+ for ( i = 0; i < len; i++ ) {
+ val = config.urlConfig[i];
+ if ( typeof val === "string" ) {
+ val = {
+ id: val,
+ label: val,
+ tooltip: "[no tooltip available]"
+ };
+ }
+ config[ val.id ] = QUnit.urlParams[ val.id ];
+ urlConfigHtml += "<input id='qunit-urlconfig-" + escapeText( val.id ) +
+ "' name='" + escapeText( val.id ) +
+ "' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) +
+ " title='" + escapeText( val.tooltip ) +
+ "'><label for='qunit-urlconfig-" + escapeText( val.id ) +
+ "' title='" + escapeText( val.tooltip ) + "'>" + val.label + "</label>";
+ }
+ for ( i in config.modules ) {
+ if ( config.modules.hasOwnProperty( i ) ) {
+ moduleNames.push(i);
+ }
+ }
+ numModules = moduleNames.length;
+ moduleNames.sort( function( a, b ) {
+ return a.localeCompare( b );
+ });
+ moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label><select id='qunit-modulefilter' name='modulefilter'><option value='' " +
+ ( config.module === undefined ? "selected='selected'" : "" ) +
+ ">< All Modules ></option>";
+
+
+ for ( i = 0; i < numModules; i++) {
+ moduleFilterHtml += "<option value='" + escapeText( encodeURIComponent(moduleNames[i]) ) + "' " +
+ ( config.module === moduleNames[i] ? "selected='selected'" : "" ) +
+ ">" + escapeText(moduleNames[i]) + "</option>";
+ }
+ moduleFilterHtml += "</select>";
+
+ // `userAgent` initialized at top of scope
+ userAgent = id( "qunit-userAgent" );
+ if ( userAgent ) {
+ userAgent.innerHTML = navigator.userAgent;
+ }
+
+ // `banner` initialized at top of scope
+ banner = id( "qunit-header" );
+ if ( banner ) {
+ banner.innerHTML = "<a href='" + QUnit.url({ filter: undefined, module: undefined, testNumber: undefined }) + "'>" + banner.innerHTML + "</a> ";
+ }
+
+ // `toolbar` initialized at top of scope
+ toolbar = id( "qunit-testrunner-toolbar" );
+ if ( toolbar ) {
+ // `filter` initialized at top of scope
+ filter = document.createElement( "input" );
+ filter.type = "checkbox";
+ filter.id = "qunit-filter-pass";
+
+ addEvent( filter, "click", function() {
+ var tmp,
+ ol = document.getElementById( "qunit-tests" );
+
+ if ( filter.checked ) {
+ ol.className = ol.className + " hidepass";
+ } else {
+ tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
+ ol.className = tmp.replace( / hidepass /, " " );
+ }
+ if ( defined.sessionStorage ) {
+ if (filter.checked) {
+ sessionStorage.setItem( "qunit-filter-passed-tests", "true" );
+ } else {
+ sessionStorage.removeItem( "qunit-filter-passed-tests" );
+ }
+ }
+ });
+
+ if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) {
+ filter.checked = true;
+ // `ol` initialized at top of scope
+ ol = document.getElementById( "qunit-tests" );
+ ol.className = ol.className + " hidepass";
+ }
+ toolbar.appendChild( filter );
+
+ // `label` initialized at top of scope
+ label = document.createElement( "label" );
+ label.setAttribute( "for", "qunit-filter-pass" );
+ label.setAttribute( "title", "Only show tests and assertions that fail. Stored in sessionStorage." );
+ label.innerHTML = "Hide passed tests";
+ toolbar.appendChild( label );
+
+ urlConfigCheckboxesContainer = document.createElement("span");
+ urlConfigCheckboxesContainer.innerHTML = urlConfigHtml;
+ urlConfigCheckboxes = urlConfigCheckboxesContainer.getElementsByTagName("input");
+ // For oldIE support:
+ // * Add handlers to the individual elements instead of the container
+ // * Use "click" instead of "change"
+ // * Fallback from event.target to event.srcElement
+ addEvents( urlConfigCheckboxes, "click", function( event ) {
+ var params = {},
+ target = event.target || event.srcElement;
+ params[ target.name ] = target.checked ? true : undefined;
+ window.location = QUnit.url( params );
+ });
+ toolbar.appendChild( urlConfigCheckboxesContainer );
+
+ if (numModules > 1) {
+ moduleFilter = document.createElement( "span" );
+ moduleFilter.setAttribute( "id", "qunit-modulefilter-container" );
+ moduleFilter.innerHTML = moduleFilterHtml;
+ addEvent( moduleFilter.lastChild, "change", function() {
+ var selectBox = moduleFilter.getElementsByTagName("select")[0],
+ selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value);
+
+ window.location = QUnit.url({
+ module: ( selectedModule === "" ) ? undefined : selectedModule,
+ // Remove any existing filters
+ filter: undefined,
+ testNumber: undefined
+ });
+ });
+ toolbar.appendChild(moduleFilter);
+ }
+ }
+
+ // `main` initialized at top of scope
+ main = id( "qunit-fixture" );
+ if ( main ) {
+ config.fixture = main.innerHTML;
+ }
+
+ if ( config.autostart ) {
+ QUnit.start();
+ }
+};
+
+addEvent( window, "load", QUnit.load );
+
+// `onErrorFnPrev` initialized at top of scope
+// Preserve other handlers
+onErrorFnPrev = window.onerror;
+
+// Cover uncaught exceptions
+// Returning true will suppress the default browser handler,
+// returning false will let it run.
+window.onerror = function ( error, filePath, linerNr ) {
+ var ret = false;
+ if ( onErrorFnPrev ) {
+ ret = onErrorFnPrev( error, filePath, linerNr );
+ }
+
+ // Treat return value as window.onerror itself does,
+ // Only do our handling if not suppressed.
+ if ( ret !== true ) {
+ if ( QUnit.config.current ) {
+ if ( QUnit.config.current.ignoreGlobalErrors ) {
+ return true;
+ }
+ QUnit.pushFailure( error, filePath + ":" + linerNr );
+ } else {
+ QUnit.test( "global failure", extend( function() {
+ QUnit.pushFailure( error, filePath + ":" + linerNr );
+ }, { validTest: validTest } ) );
+ }
+ return false;
+ }
+
+ return ret;
+};
+
+function done() {
+ config.autorun = true;
+
+ // Log the last module results
+ if ( config.currentModule ) {
+ runLoggingCallbacks( "moduleDone", QUnit, {
+ name: config.currentModule,
+ failed: config.moduleStats.bad,
+ passed: config.moduleStats.all - config.moduleStats.bad,
+ total: config.moduleStats.all
+ });
+ }
+ delete config.previousModule;
+
+ var i, key,
+ banner = id( "qunit-banner" ),
+ tests = id( "qunit-tests" ),
+ runtime = +new Date() - config.started,
+ passed = config.stats.all - config.stats.bad,
+ html = [
+ "Tests completed in ",
+ runtime,
+ " milliseconds.<br/>",
+ "<span class='passed'>",
+ passed,
+ "</span> assertions of <span class='total'>",
+ config.stats.all,
+ "</span> passed, <span class='failed'>",
+ config.stats.bad,
+ "</span> failed."
+ ].join( "" );
+
+ if ( banner ) {
+ banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" );
+ }
+
+ if ( tests ) {
+ id( "qunit-testresult" ).innerHTML = html;
+ }
+
+ if ( config.altertitle && typeof document !== "undefined" && document.title ) {
+ // show ✖ for good, ✔ for bad suite result in title
+ // use escape sequences in case file gets loaded with non-utf-8-charset
+ document.title = [
+ ( config.stats.bad ? "\u2716" : "\u2714" ),
+ document.title.replace( /^[\u2714\u2716] /i, "" )
+ ].join( " " );
+ }
+
+ // clear own sessionStorage items if all tests passed
+ if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) {
+ // `key` & `i` initialized at top of scope
+ for ( i = 0; i < sessionStorage.length; i++ ) {
+ key = sessionStorage.key( i++ );
+ if ( key.indexOf( "qunit-test-" ) === 0 ) {
+ sessionStorage.removeItem( key );
+ }
+ }
+ }
+
+ // scroll back to top to show results
+ if ( window.scrollTo ) {
+ window.scrollTo(0, 0);
+ }
+
+ runLoggingCallbacks( "done", QUnit, {
+ failed: config.stats.bad,
+ passed: passed,
+ total: config.stats.all,
+ runtime: runtime
+ });
+}
+
+/** @return Boolean: true if this test should be ran */
+function validTest( test ) {
+ var include,
+ filter = config.filter && config.filter.toLowerCase(),
+ module = config.module && config.module.toLowerCase(),
+ fullName = (test.module + ": " + test.testName).toLowerCase();
+
+ // Internally-generated tests are always valid
+ if ( test.callback && test.callback.validTest === validTest ) {
+ delete test.callback.validTest;
+ return true;
+ }
+
+ if ( config.testNumber ) {
+ return test.testNumber === config.testNumber;
+ }
+
+ if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) {
+ return false;
+ }
+
+ if ( !filter ) {
+ return true;
+ }
+
+ include = filter.charAt( 0 ) !== "!";
+ if ( !include ) {
+ filter = filter.slice( 1 );
+ }
+
+ // If the filter matches, we need to honour include
+ if ( fullName.indexOf( filter ) !== -1 ) {
+ return include;
+ }
+
+ // Otherwise, do the opposite
+ return !include;
+}
+
+// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions)
+// Later Safari and IE10 are supposed to support error.stack as well
+// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
+function extractStacktrace( e, offset ) {
+ offset = offset === undefined ? 3 : offset;
+
+ var stack, include, i;
+
+ if ( e.stacktrace ) {
+ // Opera
+ return e.stacktrace.split( "\n" )[ offset + 3 ];
+ } else if ( e.stack ) {
+ // Firefox, Chrome
+ stack = e.stack.split( "\n" );
+ if (/^error$/i.test( stack[0] ) ) {
+ stack.shift();
+ }
+ if ( fileName ) {
+ include = [];
+ for ( i = offset; i < stack.length; i++ ) {
+ if ( stack[ i ].indexOf( fileName ) !== -1 ) {
+ break;
+ }
+ include.push( stack[ i ] );
+ }
+ if ( include.length ) {
+ return include.join( "\n" );
+ }
+ }
+ return stack[ offset ];
+ } else if ( e.sourceURL ) {
+ // Safari, PhantomJS
+ // hopefully one day Safari provides actual stacktraces
+ // exclude useless self-reference for generated Error objects
+ if ( /qunit.js$/.test( e.sourceURL ) ) {
+ return;
+ }
+ // for actual exceptions, this is useful
+ return e.sourceURL + ":" + e.line;
+ }
+}
+function sourceFromStacktrace( offset ) {
+ try {
+ throw new Error();
+ } catch ( e ) {
+ return extractStacktrace( e, offset );
+ }
+}
+
+/**
+ * Escape text for attribute or text content.
+ */
+function escapeText( s ) {
+ if ( !s ) {
+ return "";
+ }
+ s = s + "";
+ // Both single quotes and double quotes (for attributes)
+ return s.replace( /['"<>&]/g, function( s ) {
+ switch( s ) {
+ case "'":
+ return "'";
+ case "\"":
+ return """;
+ case "<":
+ return "<";
+ case ">":
+ return ">";
+ case "&":
+ return "&";
+ }
+ });
+}
+
+function synchronize( callback, last ) {
+ config.queue.push( callback );
+
+ if ( config.autorun && !config.blocking ) {
+ process( last );
+ }
+}
+
+function process( last ) {
+ function next() {
+ process( last );
+ }
+ var start = new Date().getTime();
+ config.depth = config.depth ? config.depth + 1 : 1;
+
+ while ( config.queue.length && !config.blocking ) {
+ if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) {
+ config.queue.shift()();
+ } else {
+ setTimeout( next, 13 );
+ break;
+ }
+ }
+ config.depth--;
+ if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
+ done();
+ }
+}
+
+function saveGlobal() {
+ config.pollution = [];
+
+ if ( config.noglobals ) {
+ for ( var key in window ) {
+ if ( hasOwn.call( window, key ) ) {
+ // in Opera sometimes DOM element ids show up here, ignore them
+ if ( /^qunit-test-output/.test( key ) ) {
+ continue;
+ }
+ config.pollution.push( key );
+ }
+ }
+ }
+}
+
+function checkPollution() {
+ var newGlobals,
+ deletedGlobals,
+ old = config.pollution;
+
+ saveGlobal();
+
+ newGlobals = diff( config.pollution, old );
+ if ( newGlobals.length > 0 ) {
+ QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") );
+ }
+
+ deletedGlobals = diff( old, config.pollution );
+ if ( deletedGlobals.length > 0 ) {
+ QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") );
+ }
+}
+
+// returns a new Array with the elements that are in a but not in b
+function diff( a, b ) {
+ var i, j,
+ result = a.slice();
+
+ for ( i = 0; i < result.length; i++ ) {
+ for ( j = 0; j < b.length; j++ ) {
+ if ( result[i] === b[j] ) {
+ result.splice( i, 1 );
+ i--;
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+function extend( a, b ) {
+ for ( var prop in b ) {
+ if ( hasOwn.call( b, prop ) ) {
+ // Avoid "Member not found" error in IE8 caused by messing with window.constructor
+ if ( !( prop === "constructor" && a === window ) ) {
+ if ( b[ prop ] === undefined ) {
+ delete a[ prop ];
+ } else {
+ a[ prop ] = b[ prop ];
+ }
+ }
+ }
+ }
+
+ return a;
+}
+
+/**
+ * @param {HTMLElement} elem
+ * @param {string} type
+ * @param {Function} fn
+ */
+function addEvent( elem, type, fn ) {
+ // Standards-based browsers
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, fn, false );
+ // IE
+ } else {
+ elem.attachEvent( "on" + type, fn );
+ }
+}
+
+/**
+ * @param {Array|NodeList} elems
+ * @param {string} type
+ * @param {Function} fn
+ */
+function addEvents( elems, type, fn ) {
+ var i = elems.length;
+ while ( i-- ) {
+ addEvent( elems[i], type, fn );
+ }
+}
+
+function hasClass( elem, name ) {
+ return (" " + elem.className + " ").indexOf(" " + name + " ") > -1;
+}
+
+function addClass( elem, name ) {
+ if ( !hasClass( elem, name ) ) {
+ elem.className += (elem.className ? " " : "") + name;
+ }
+}
+
+function removeClass( elem, name ) {
+ var set = " " + elem.className + " ";
+ // Class name may appear multiple times
+ while ( set.indexOf(" " + name + " ") > -1 ) {
+ set = set.replace(" " + name + " " , " ");
+ }
+ // If possible, trim it for prettiness, but not necessarily
+ elem.className = typeof set.trim === "function" ? set.trim() : set.replace(/^\s+|\s+$/g, "");
+}
+
+function id( name ) {
+ return !!( typeof document !== "undefined" && document && document.getElementById ) &&
+ document.getElementById( name );
+}
+
+function registerLoggingCallback( key ) {
+ return function( callback ) {
+ config[key].push( callback );
+ };
+}
+
+// Supports deprecated method of completely overwriting logging callbacks
+function runLoggingCallbacks( key, scope, args ) {
+ var i, callbacks;
+ if ( QUnit.hasOwnProperty( key ) ) {
+ QUnit[ key ].call(scope, args );
+ } else {
+ callbacks = config[ key ];
+ for ( i = 0; i < callbacks.length; i++ ) {
+ callbacks[ i ].call( scope, args );
+ }
+ }
+}
+
+// Test for equality any JavaScript type.
+// Author: Philippe Rathé <prathe at gmail.com>
+QUnit.equiv = (function() {
+
+ // Call the o related callback with the given arguments.
+ function bindCallbacks( o, callbacks, args ) {
+ var prop = QUnit.objectType( o );
+ if ( prop ) {
+ if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
+ return callbacks[ prop ].apply( callbacks, args );
+ } else {
+ return callbacks[ prop ]; // or undefined
+ }
+ }
+ }
+
+ // the real equiv function
+ var innerEquiv,
+ // stack to decide between skip/abort functions
+ callers = [],
+ // stack to avoiding loops from circular referencing
+ parents = [],
+ parentsB = [],
+
+ getProto = Object.getPrototypeOf || function ( obj ) {
+ /*jshint camelcase:false */
+ return obj.__proto__;
+ },
+ callbacks = (function () {
+
+ // for string, boolean, number and null
+ function useStrictEquality( b, a ) {
+ /*jshint eqeqeq:false */
+ if ( b instanceof a.constructor || a instanceof b.constructor ) {
+ // to catch short annotation VS 'new' annotation of a
+ // declaration
+ // e.g. var i = 1;
+ // var j = new Number(1);
+ return a == b;
+ } else {
+ return a === b;
+ }
+ }
+
+ return {
+ "string": useStrictEquality,
+ "boolean": useStrictEquality,
+ "number": useStrictEquality,
+ "null": useStrictEquality,
+ "undefined": useStrictEquality,
+
+ "nan": function( b ) {
+ return isNaN( b );
+ },
+
+ "date": function( b, a ) {
+ return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
+ },
+
+ "regexp": function( b, a ) {
+ return QUnit.objectType( b ) === "regexp" &&
+ // the regex itself
+ a.source === b.source &&
+ // and its modifiers
+ a.global === b.global &&
+ // (gmi) ...
+ a.ignoreCase === b.ignoreCase &&
+ a.multiline === b.multiline &&
+ a.sticky === b.sticky;
+ },
+
+ // - skip when the property is a method of an instance (OOP)
+ // - abort otherwise,
+ // initial === would have catch identical references anyway
+ "function": function() {
+ var caller = callers[callers.length - 1];
+ return caller !== Object && typeof caller !== "undefined";
+ },
+
+ "array": function( b, a ) {
+ var i, j, len, loop, aCircular, bCircular;
+
+ // b could be an object literal here
+ if ( QUnit.objectType( b ) !== "array" ) {
+ return false;
+ }
+
+ len = a.length;
+ if ( len !== b.length ) {
+ // safe and faster
+ return false;
+ }
+
+ // track reference to avoid circular references
+ parents.push( a );
+ parentsB.push( b );
+ for ( i = 0; i < len; i++ ) {
+ loop = false;
+ for ( j = 0; j < parents.length; j++ ) {
+ aCircular = parents[j] === a[i];
+ bCircular = parentsB[j] === b[i];
+ if ( aCircular || bCircular ) {
+ if ( a[i] === b[i] || aCircular && bCircular ) {
+ loop = true;
+ } else {
+ parents.pop();
+ parentsB.pop();
+ return false;
+ }
+ }
+ }
+ if ( !loop && !innerEquiv(a[i], b[i]) ) {
+ parents.pop();
+ parentsB.pop();
+ return false;
+ }
+ }
+ parents.pop();
+ parentsB.pop();
+ return true;
+ },
+
+ "object": function( b, a ) {
+ /*jshint forin:false */
+ var i, j, loop, aCircular, bCircular,
+ // Default to true
+ eq = true,
+ aProperties = [],
+ bProperties = [];
+
+ // comparing constructors is more strict than using
+ // instanceof
+ if ( a.constructor !== b.constructor ) {
+ // Allow objects with no prototype to be equivalent to
+ // objects with Object as their constructor.
+ if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) ||
+ ( getProto(b) === null && getProto(a) === Object.prototype ) ) ) {
+ return false;
+ }
+ }
+
+ // stack constructor before traversing properties
+ callers.push( a.constructor );
+
+ // track reference to avoid circular references
+ parents.push( a );
+ parentsB.push( b );
+
+ // be strict: don't ensure hasOwnProperty and go deep
+ for ( i in a ) {
+ loop = false;
+ for ( j = 0; j < parents.length; j++ ) {
+ aCircular = parents[j] === a[i];
+ bCircular = parentsB[j] === b[i];
+ if ( aCircular || bCircular ) {
+ if ( a[i] === b[i] || aCircular && bCircular ) {
+ loop = true;
+ } else {
+ eq = false;
+ break;
+ }
+ }
+ }
+ aProperties.push(i);
+ if ( !loop && !innerEquiv(a[i], b[i]) ) {
+ eq = false;
+ break;
+ }
+ }
+
+ parents.pop();
+ parentsB.pop();
+ callers.pop(); // unstack, we are done
+
+ for ( i in b ) {
+ bProperties.push( i ); // collect b's properties
+ }
+
+ // Ensures identical properties name
+ return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
+ }
+ };
+ }());
+
+ innerEquiv = function() { // can take multiple arguments
+ var args = [].slice.apply( arguments );
+ if ( args.length < 2 ) {
+ return true; // end transition
+ }
+
+ return (function( a, b ) {
+ if ( a === b ) {
+ return true; // catch the most you can
+ } else if ( a === null || b === null || typeof a === "undefined" ||
+ typeof b === "undefined" ||
+ QUnit.objectType(a) !== QUnit.objectType(b) ) {
+ return false; // don't lose time with error prone cases
+ } else {
+ return bindCallbacks(a, callbacks, [ b, a ]);
+ }
+
+ // apply transition with (1..n) arguments
+ }( args[0], args[1] ) && innerEquiv.apply( this, args.splice(1, args.length - 1 )) );
+ };
+
+ return innerEquiv;
+}());
+
+/**
+ * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
+ * http://flesler.blogspot.com Licensed under BSD
+ * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
+ *
+ * @projectDescription Advanced and extensible data dumping for Javascript.
+ * @version 1.0.0
+ * @author Ariel Flesler
+ * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
+ */
+QUnit.jsDump = (function() {
+ function quote( str ) {
+ return "\"" + str.toString().replace( /"/g, "\\\"" ) + "\"";
+ }
+ function literal( o ) {
+ return o + "";
+ }
+ function join( pre, arr, post ) {
+ var s = jsDump.separator(),
+ base = jsDump.indent(),
+ inner = jsDump.indent(1);
+ if ( arr.join ) {
+ arr = arr.join( "," + s + inner );
+ }
+ if ( !arr ) {
+ return pre + post;
+ }
+ return [ pre, inner + arr, base + post ].join(s);
+ }
+ function array( arr, stack ) {
+ var i = arr.length, ret = new Array(i);
+ this.up();
+ while ( i-- ) {
+ ret[i] = this.parse( arr[i] , undefined , stack);
+ }
+ this.down();
+ return join( "[", ret, "]" );
+ }
+
+ var reName = /^function (\w+)/,
+ jsDump = {
+ // type is used mostly internally, you can fix a (custom)type in advance
+ parse: function( obj, type, stack ) {
+ stack = stack || [ ];
+ var inStack, res,
+ parser = this.parsers[ type || this.typeOf(obj) ];
+
+ type = typeof parser;
+ inStack = inArray( obj, stack );
+
+ if ( inStack !== -1 ) {
+ return "recursion(" + (inStack - stack.length) + ")";
+ }
+ if ( type === "function" ) {
+ stack.push( obj );
+ res = parser.call( this, obj, stack );
+ stack.pop();
+ return res;
+ }
+ return ( type === "string" ) ? parser : this.parsers.error;
+ },
+ typeOf: function( obj ) {
+ var type;
+ if ( obj === null ) {
+ type = "null";
+ } else if ( typeof obj === "undefined" ) {
+ type = "undefined";
+ } else if ( QUnit.is( "regexp", obj) ) {
+ type = "regexp";
+ } else if ( QUnit.is( "date", obj) ) {
+ type = "date";
+ } else if ( QUnit.is( "function", obj) ) {
+ type = "function";
+ } else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) {
+ type = "window";
+ } else if ( obj.nodeType === 9 ) {
+ type = "document";
+ } else if ( obj.nodeType ) {
+ type = "node";
+ } else if (
+ // native arrays
+ toString.call( obj ) === "[object Array]" ||
+ // NodeList objects
+ ( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) )
+ ) {
+ type = "array";
+ } else if ( obj.constructor === Error.prototype.constructor ) {
+ type = "error";
+ } else {
+ type = typeof obj;
+ }
+ return type;
+ },
+ separator: function() {
+ return this.multiline ? this.HTML ? "<br />" : "\n" : this.HTML ? " " : " ";
+ },
+ // extra can be a number, shortcut for increasing-calling-decreasing
+ indent: function( extra ) {
+ if ( !this.multiline ) {
+ return "";
+ }
+ var chr = this.indentChar;
+ if ( this.HTML ) {
+ chr = chr.replace( /\t/g, " " ).replace( / /g, " " );
+ }
+ return new Array( this.depth + ( extra || 0 ) ).join(chr);
+ },
+ up: function( a ) {
+ this.depth += a || 1;
+ },
+ down: function( a ) {
+ this.depth -= a || 1;
+ },
+ setParser: function( name, parser ) {
+ this.parsers[name] = parser;
+ },
+ // The next 3 are exposed so you can use them
+ quote: quote,
+ literal: literal,
+ join: join,
+ //
+ depth: 1,
+ // This is the list of parsers, to modify them, use jsDump.setParser
+ parsers: {
+ window: "[Window]",
+ document: "[Document]",
+ error: function(error) {
+ return "Error(\"" + error.message + "\")";
+ },
+ unknown: "[Unknown]",
+ "null": "null",
+ "undefined": "undefined",
+ "function": function( fn ) {
+ var ret = "function",
+ // functions never have name in IE
+ name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1];
+
+ if ( name ) {
+ ret += " " + name;
+ }
+ ret += "( ";
+
+ ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" );
+ return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" );
+ },
+ array: array,
+ nodelist: array,
+ "arguments": array,
+ object: function( map, stack ) {
+ /*jshint forin:false */
+ var ret = [ ], keys, key, val, i;
+ QUnit.jsDump.up();
+ keys = [];
+ for ( key in map ) {
+ keys.push( key );
+ }
+ keys.sort();
+ for ( i = 0; i < keys.length; i++ ) {
+ key = keys[ i ];
+ val = map[ key ];
+ ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) );
+ }
+ QUnit.jsDump.down();
+ return join( "{", ret, "}" );
+ },
+ node: function( node ) {
+ var len, i, val,
+ open = QUnit.jsDump.HTML ? "<" : "<",
+ close = QUnit.jsDump.HTML ? ">" : ">",
+ tag = node.nodeName.toLowerCase(),
+ ret = open + tag,
+ attrs = node.attributes;
+
+ if ( attrs ) {
+ for ( i = 0, len = attrs.length; i < len; i++ ) {
+ val = attrs[i].nodeValue;
+ // IE6 includes all attributes in .attributes, even ones not explicitly set.
+ // Those have values like undefined, null, 0, false, "" or "inherit".
+ if ( val && val !== "inherit" ) {
+ ret += " " + attrs[i].nodeName + "=" + QUnit.jsDump.parse( val, "attribute" );
+ }
+ }
+ }
+ ret += close;
+
+ // Show content of TextNode or CDATASection
+ if ( node.nodeType === 3 || node.nodeType === 4 ) {
+ ret += node.nodeValue;
+ }
+
+ return ret + open + "/" + tag + close;
+ },
+ // function calls it internally, it's the arguments part of the function
+ functionArgs: function( fn ) {
+ var args,
+ l = fn.length;
+
+ if ( !l ) {
+ return "";
+ }
+
+ args = new Array(l);
+ while ( l-- ) {
+ // 97 is 'a'
+ args[l] = String.fromCharCode(97+l);
+ }
+ return " " + args.join( ", " ) + " ";
+ },
+ // object calls it internally, the key part of an item in a map
+ key: quote,
+ // function calls it internally, it's the content of the function
+ functionCode: "[code]",
+ // node calls it internally, it's an html attribute value
+ attribute: quote,
+ string: quote,
+ date: quote,
+ regexp: literal,
+ number: literal,
+ "boolean": literal
+ },
+ // if true, entities are escaped ( <, >, \t, space and \n )
+ HTML: false,
+ // indentation unit
+ indentChar: " ",
+ // if true, items in a collection, are separated by a \n, else just a space.
+ multiline: true
+ };
+
+ return jsDump;
+}());
+
+// from jquery.js
+function inArray( elem, array ) {
+ if ( array.indexOf ) {
+ return array.indexOf( elem );
+ }
+
+ for ( var i = 0, length = array.length; i < length; i++ ) {
+ if ( array[ i ] === elem ) {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+/*
+ * Javascript Diff Algorithm
+ * By John Resig (http://ejohn.org/)
+ * Modified by Chu Alan "sprite"
+ *
+ * Released under the MIT license.
+ *
+ * More Info:
+ * http://ejohn.org/projects/javascript-diff-algorithm/
+ *
+ * Usage: QUnit.diff(expected, actual)
+ *
+ * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
+ */
+QUnit.diff = (function() {
+ /*jshint eqeqeq:false, eqnull:true */
+ function diff( o, n ) {
+ var i,
+ ns = {},
+ os = {};
+
+ for ( i = 0; i < n.length; i++ ) {
+ if ( !hasOwn.call( ns, n[i] ) ) {
+ ns[ n[i] ] = {
+ rows: [],
+ o: null
+ };
+ }
+ ns[ n[i] ].rows.push( i );
+ }
+
+ for ( i = 0; i < o.length; i++ ) {
+ if ( !hasOwn.call( os, o[i] ) ) {
+ os[ o[i] ] = {
+ rows: [],
+ n: null
+ };
+ }
+ os[ o[i] ].rows.push( i );
+ }
+
+ for ( i in ns ) {
+ if ( hasOwn.call( ns, i ) ) {
+ if ( ns[i].rows.length === 1 && hasOwn.call( os, i ) && os[i].rows.length === 1 ) {
+ n[ ns[i].rows[0] ] = {
+ text: n[ ns[i].rows[0] ],
+ row: os[i].rows[0]
+ };
+ o[ os[i].rows[0] ] = {
+ text: o[ os[i].rows[0] ],
+ row: ns[i].rows[0]
+ };
+ }
+ }
+ }
+
+ for ( i = 0; i < n.length - 1; i++ ) {
+ if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null &&
+ n[ i + 1 ] == o[ n[i].row + 1 ] ) {
+
+ n[ i + 1 ] = {
+ text: n[ i + 1 ],
+ row: n[i].row + 1
+ };
+ o[ n[i].row + 1 ] = {
+ text: o[ n[i].row + 1 ],
+ row: i + 1
+ };
+ }
+ }
+
+ for ( i = n.length - 1; i > 0; i-- ) {
+ if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null &&
+ n[ i - 1 ] == o[ n[i].row - 1 ]) {
+
+ n[ i - 1 ] = {
+ text: n[ i - 1 ],
+ row: n[i].row - 1
+ };
+ o[ n[i].row - 1 ] = {
+ text: o[ n[i].row - 1 ],
+ row: i - 1
+ };
+ }
+ }
+
+ return {
+ o: o,
+ n: n
+ };
+ }
+
+ return function( o, n ) {
+ o = o.replace( /\s+$/, "" );
+ n = n.replace( /\s+$/, "" );
+
+ var i, pre,
+ str = "",
+ out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ),
+ oSpace = o.match(/\s+/g),
+ nSpace = n.match(/\s+/g);
+
+ if ( oSpace == null ) {
+ oSpace = [ " " ];
+ }
+ else {
+ oSpace.push( " " );
+ }
+
+ if ( nSpace == null ) {
+ nSpace = [ " " ];
+ }
+ else {
+ nSpace.push( " " );
+ }
+
+ if ( out.n.length === 0 ) {
+ for ( i = 0; i < out.o.length; i++ ) {
+ str += "<del>" + out.o[i] + oSpace[i] + "</del>";
+ }
+ }
+ else {
+ if ( out.n[0].text == null ) {
+ for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) {
+ str += "<del>" + out.o[n] + oSpace[n] + "</del>";
+ }
+ }
+
+ for ( i = 0; i < out.n.length; i++ ) {
+ if (out.n[i].text == null) {
+ str += "<ins>" + out.n[i] + nSpace[i] + "</ins>";
+ }
+ else {
+ // `pre` initialized at top of scope
+ pre = "";
+
+ for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) {
+ pre += "<del>" + out.o[n] + oSpace[n] + "</del>";
+ }
+ str += " " + out.n[i].text + nSpace[i] + pre;
+ }
+ }
+ }
+
+ return str;
+ };
+}());
+
+// for CommonJS environments, export everything
+if ( typeof exports !== "undefined" ) {
+ extend( exports, QUnit.constructor.prototype );
+}
+
+// get at whatever the global object is, like window in browsers
+}( (function() {return this;}.call()) ));
diff --git a/tests/test-min.html b/tests/test-min.html
new file mode 100644
index 0000000..4f66396
--- /dev/null
+++ b/tests/test-min.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Stupid-Table Tests</title>
+ <link rel="stylesheet" href="qunit.css">
+
+ <!--
+ WOW, Javascript dependencies galore. And people do this normally!
+ --!>
+ <script src="jquery.js"></script>
+ <script src="underscore.js"></script>
+ <script src="../stupidtable.min.js"></script>
+ <script src="qunit.js"></script>
+ <script src="tests.js"></script>
+
+ <style type="text/css">
+ </style>
+</head>
+<body>
+<div id="qunit"></div>
+<div id="qunit-fixture" class="test-hidden">
+
+ <div class="tablewrap">
+ <h2>Basic Table</h2>
+ <table id="basic">
+ <thead>
+ <tr>
+ <th data-sort="int">int</th>
+ <th data-sort="float">float</th>
+ <th data-sort="string">string</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>15</td>
+ <td>-.18</td>
+ <td>banana</td>
+ </tr>
+ <tr class="awesome">
+ <td>95</td>
+ <td>36</td>
+ <td>coke</td>
+ </tr>
+ <tr>
+ <td>2</td>
+ <td>-152.5</td>
+ <td>apple</td>
+ </tr>
+ <tr>
+ <td>-53</td>
+ <td>88.5</td>
+ <td>zebra</td>
+ </tr>
+ <tr>
+ <td>195</td>
+ <td>-858</td>
+ <td>orange</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="tablewrap">
+ <h2>Complex Table</h2>
+ <table id="complex">
+ <thead>
+ <tr>
+ <th data-sort="int">int</th>
+ <th data-sort="float">float</th>
+ <th data-sort="string-ins">case</th>
+ <th>Can't sort me!</th>
+ <th data-sort="date">date</th>
+ <th data-sort="int">Letter frequency</th>
+ </tr>
+ </thead>
+ <tbody class="some-tbody-class" style="border: 2px;">
+ <tr>
+ <td>15</td>
+ <td>-.18</td>
+ <td>Homer</td>
+ <td>arbitrary</td>
+ <td>Sep 15, 2002</td>
+ <td data-sort-value="0">E</td>
+ </tr>
+ <tr class="awesome">
+ <td>95</td>
+ <td>36</td>
+ <td>purple</td>
+ <td>pointless</td>
+ <td>Aug 07, 2004</td>
+ <td data-sort-value="1">T</td>
+ </tr>
+ <tr>
+ <td>2</td>
+ <td>-152.5</td>
+ <td>is</td>
+ <td>silly</td>
+ <td>Mar 15, 1986</td>
+ <td data-sort-value="2">A</td>
+ </tr>
+ <tr>
+ <td>-53</td>
+ <td>88.5</td>
+ <td>a</td>
+ <td>eccentric</td>
+ <td>Feb 27, 2086</td>
+ <td data-sort-value="3">O</td>
+ </tr>
+ <tr>
+ <td>195</td>
+ <td>-858</td>
+ <td>fruit</td>
+ <td>garbage</td>
+ <td>Mar 15, 1986</td>
+ <td data-sort-value="4">I</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="tablewrap">
+ <h2>Basic Colspan Table</h2>
+ <table id="basic-colspan">
+ <thead>
+ <tr>
+ <th data-sort="string">Letter</td>
+ <th colspan="2" data-sort="string">colspan=2</th>
+ <th data-sort="int">Number</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>def</td>
+ <td>X</td>
+ <td>9</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>abc</td>
+ <td>Z</td>
+ <td>8</td>
+ <td>2</td>
+ </tr>
+ <tr>
+ <td>bcd</td>
+ <td>Y</td>
+ <td>7</td>
+ <td>0</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="tablewrap">
+ <h2>Complex Colspan Table</h2>
+ <table id="complex-colspan">
+ <thead>
+ <tr>
+ <th colspan="4">The Big Table Header</th>
+ </tr>
+ <tr>
+ <th data-sort="string">Letter</td>
+ <th colspan="2" data-sort="string">colspan=2</th>
+ <th data-sort="int">Number</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>def</td>
+ <td>X</td>
+ <td>9</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>abc</td>
+ <td>Z</td>
+ <td>8</td>
+ <td>2</td>
+ </tr>
+ <tr>
+ <td>bcd</td>
+ <td>Y</td>
+ <td>7</td>
+ <td>0</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+</div><!--qunit-fixture-->
+</body>
+</html>
+
diff --git a/tests/test.html b/tests/test.html
new file mode 100644
index 0000000..469eb10
--- /dev/null
+++ b/tests/test.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Stupid-Table Tests</title>
+ <link rel="stylesheet" href="qunit.css">
+
+ <!--
+ WOW, Javascript dependencies galore. And people do this normally!
+ --!>
+ <script src="jquery.js"></script>
+ <script src="underscore.js"></script>
+ <script src="../stupidtable.js"></script>
+ <script src="qunit.js"></script>
+ <script src="tests.js"></script>
+
+ <style type="text/css">
+ </style>
+</head>
+<body>
+<div id="qunit"></div>
+<div id="qunit-fixture" class="test-hidden">
+
+ <div class="tablewrap">
+ <h2>Basic Table</h2>
+ <table id="basic">
+ <thead>
+ <tr>
+ <th data-sort="int">int</th>
+ <th data-sort="float">float</th>
+ <th data-sort="string">string</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>15</td>
+ <td>-.18</td>
+ <td>banana</td>
+ </tr>
+ <tr class="awesome">
+ <td>95</td>
+ <td>36</td>
+ <td>coke</td>
+ </tr>
+ <tr>
+ <td>2</td>
+ <td>-152.5</td>
+ <td>apple</td>
+ </tr>
+ <tr>
+ <td>-53</td>
+ <td>88.5</td>
+ <td>zebra</td>
+ </tr>
+ <tr>
+ <td>195</td>
+ <td>-858</td>
+ <td>orange</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="tablewrap">
+ <h2>Complex Table</h2>
+ <table id="complex">
+ <thead>
+ <tr>
+ <th data-sort="int">int</th>
+ <th data-sort="float">float</th>
+ <th data-sort="string-ins">case</th>
+ <th>Can't sort me!</th>
+ <th data-sort="date">date</th>
+ <th data-sort="int">Letter frequency</th>
+ </tr>
+ </thead>
+ <tbody class="some-tbody-class" style="border: 2px;">
+ <tr>
+ <td>15</td>
+ <td>-.18</td>
+ <td>Homer</td>
+ <td>arbitrary</td>
+ <td>Sep 15, 2002</td>
+ <td data-sort-value="0">E</td>
+ </tr>
+ <tr class="awesome">
+ <td>95</td>
+ <td>36</td>
+ <td>purple</td>
+ <td>pointless</td>
+ <td>Aug 07, 2004</td>
+ <td data-sort-value="1">T</td>
+ </tr>
+ <tr>
+ <td>2</td>
+ <td>-152.5</td>
+ <td>is</td>
+ <td>silly</td>
+ <td>Mar 15, 1986</td>
+ <td data-sort-value="2">A</td>
+ </tr>
+ <tr>
+ <td>-53</td>
+ <td>88.5</td>
+ <td>a</td>
+ <td>eccentric</td>
+ <td>Feb 27, 2086</td>
+ <td data-sort-value="3">O</td>
+ </tr>
+ <tr>
+ <td>195</td>
+ <td>-858</td>
+ <td>fruit</td>
+ <td>garbage</td>
+ <td>Mar 15, 1986</td>
+ <td data-sort-value="4">I</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="tablewrap">
+ <h2>Basic Colspan Table</h2>
+ <table id="basic-colspan">
+ <thead>
+ <tr>
+ <th data-sort="string">Letter</td>
+ <th colspan="2" data-sort="string">colspan=2</th>
+ <th data-sort="int">Number</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>def</td>
+ <td>X</td>
+ <td>9</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>abc</td>
+ <td>Z</td>
+ <td>8</td>
+ <td>2</td>
+ </tr>
+ <tr>
+ <td>bcd</td>
+ <td>Y</td>
+ <td>7</td>
+ <td>0</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="tablewrap">
+ <h2>Complex Colspan Table</h2>
+ <table id="complex-colspan">
+ <thead>
+ <tr>
+ <th colspan="4">The Big Table Header</th>
+ </tr>
+ <tr>
+ <th data-sort="string">Letter</td>
+ <th colspan="2" data-sort="string">colspan=2</th>
+ <th data-sort="int">Number</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>def</td>
+ <td>X</td>
+ <td>9</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>abc</td>
+ <td>Z</td>
+ <td>8</td>
+ <td>2</td>
+ </tr>
+ <tr>
+ <td>bcd</td>
+ <td>Y</td>
+ <td>7</td>
+ <td>0</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+</div><!--qunit-fixture-->
+</body>
+</html>
diff --git a/tests/tests.js b/tests/tests.js
new file mode 100644
index 0000000..b1446df
--- /dev/null
+++ b/tests/tests.js
@@ -0,0 +1,598 @@
+/*
+ * IMPORTANT NOTE: Because testing DOM manipulation is really annoying, my
+ * tests will be created using many setTimeouts. This means if your computer
+ * is substantially slower than mine, you may get inconsistent results.
+ */
+$(function(){
+// ===========================================================================
+// Test helpers & QUnit callbacks
+// ===========================================================================
+window.WAIT_TIME_MS = 200;
+
+var get_column_elements = function($table, col_index){
+ var vals = [];
+ $table.find("tbody tr").each(function(){
+ var val = $(this).children("td").eq(col_index).html();
+ vals.push(val);
+ });
+ return vals;
+};
+
+var test_table_state = function(fn){
+ setTimeout(function(){
+ fn();
+ QUnit.start();
+ }, WAIT_TIME_MS);
+};
+
+var date_from_string = function(str){
+ var months = ["jan","feb","mar","apr","may","jun","jul",
+ "aug","sep","oct","nov","dec"];
+ var pattern = "^([a-zA-Z]{3})\\s*(\\d{2}),\\s*(\\d{4})$";
+ var re = new RegExp(pattern);
+ var DateParts = re.exec(str).slice(1);
+
+ var Year = DateParts[2];
+ var Month = $.inArray(DateParts[0].toLowerCase(), months);
+ var Day = DateParts[1];
+ return new Date(Year, Month, Day);
+};
+
+/*
+ * In order to accurately simulate a double click, we have to use a slight pause
+ * between clicks. During unittests, calling .click() on a column header twice
+ * without delay causes the sort to get out of order. I have not been able to
+ * reproduce this manually. Maybe some sort of lock is needed...UNTIL THEN!...
+ */
+$.fn.doubleclick = function(){
+ var $this = $(this);
+ $this.click();
+ setTimeout(function(){
+ $this.click();
+ }, 10);
+ return this;
+};
+
+/*
+ * Enable stupid tables at the end for manual testing and experiments
+ */
+QUnit.done(function(){
+ $("#complex").stupidtable({
+ "date":function(a,b){
+ // Get these into date objects for comparison.
+ var aDate = date_from_string(a);
+ var bDate = date_from_string(b);
+
+ return aDate - bDate;
+ }
+ });
+ $("#basic").stupidtable();
+ $("#basic-colspan").stupidtable();
+ $("#complex-colspan").stupidtable();
+ $("#qunit-fixture").removeClass("test-hidden");
+});
+
+
+/*
+ * Begin tests
+ * NOTE: when to use test vs asyncTest: When you plan on sorting the table and
+ * examining the results, you must use the test_table_state function and have
+ * your test wrapped in asyncTest(). If you wish to only make assertions
+ * regarding the initial state of the html, just use test().
+ */
+
+// =============================================================================
+// basic table
+// =============================================================================
+test("Basic table initial order", function(){
+ var INT_COLUMN = 0;
+ var FLOAT_COLUMN = 1;
+ var STRING_COLUMN = 2;
+ var expected;
+ var vals;
+
+ var $table = $("#basic");
+
+ expected = ["15", "95", "2", "-53", "195"];
+ vals = get_column_elements($table, INT_COLUMN);
+ ok(_.isEqual(vals, expected));
+
+ expected = ["-.18", "36", "-152.5", "88.5", "-858"];
+ vals = get_column_elements($table, FLOAT_COLUMN);
+ ok(_.isEqual(vals, expected));
+
+ expected = ["banana", "coke", "apple", "zebra", "orange"];
+ vals = get_column_elements($table, STRING_COLUMN);
+ ok(_.isEqual(vals, expected));
+
+});
+
+asyncTest("Basic int sort", function(){
+ var INT_COLUMN = 0;
+ var $table = $("#basic");
+ var $table_cols = $table.find("th");
+
+ $table.stupidtable();
+ $table_cols.eq(INT_COLUMN).click();
+
+ test_table_state(function(){
+ var expected = ["-53", "2", "15", "95", "195"];
+ var vals = get_column_elements($table, INT_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("Basic float sort", function(){
+ var FLOAT_COLUMN = 1;
+ var $table = $("#basic");
+ var $table_cols = $table.find("th");
+
+ $table.stupidtable();
+ $table_cols.eq(FLOAT_COLUMN).click();
+
+ test_table_state(function(){
+ var expected = ["-858", "-152.5", "-.18", "36", "88.5"];
+ var vals = get_column_elements($table, FLOAT_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("Basic string sort", function(){
+ var STRING_COLUMN = 2;
+ var $table = $("#basic");
+ var $table_cols = $table.find("th");
+
+ $table.stupidtable();
+ $table_cols.eq(STRING_COLUMN).click();
+
+ test_table_state(function(){
+ var expected = ["apple", "banana", "coke", "orange", "zebra"];
+ var vals = get_column_elements($table, STRING_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("Basic alternating sort", function(){
+ // A double click should cause the sort to reverse
+ var INT_COLUMN = 0;
+ var $table = $("#basic");
+ var $table_cols = $table.find("th");
+ $table.stupidtable();
+
+ $table_cols.eq(INT_COLUMN).doubleclick();
+
+ test_table_state(function(){
+ var expected = ["195", "95", "15", "2", "-53"];
+ var vals = get_column_elements($table, INT_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+
+// =============================================================================
+// complex table
+// =============================================================================
+test("Complex table initial order", function(){
+ var INT_COLUMN = 0;
+ var FLOAT_COLUMN = 1;
+ var STRING_COLUMN = 2;
+ var NOSORT_COLUMN = 3;
+ var DATE_COLUMN = 4;
+ var LETTER_FREQ_COLUMN = 5;
+ var expected;
+ var vals;
+
+ var $table = $("#complex");
+
+ expected = ["15", "95", "2", "-53", "195"];
+ vals = get_column_elements($table, INT_COLUMN);
+ ok(_.isEqual(vals, expected));
+
+ expected = ["-.18", "36", "-152.5", "88.5", "-858"];
+ vals = get_column_elements($table, FLOAT_COLUMN);
+ ok(_.isEqual(vals, expected));
+
+ expected = ["Homer", "purple", "is", "a", "fruit"];
+ vals = get_column_elements($table, STRING_COLUMN);
+ ok(_.isEqual(vals, expected));
+
+ expected = ["arbitrary", "pointless", "silly", "eccentric", "garbage"];
+ vals = get_column_elements($table, NOSORT_COLUMN);
+ ok(_.isEqual(vals, expected));
+
+ expected = ["Sep 15, 2002", "Aug 07, 2004", "Mar 15, 1986", "Feb 27, 2086",
+ "Mar 15, 1986"];
+ vals = get_column_elements($table, DATE_COLUMN);
+ ok(_.isEqual(vals, expected));
+
+ expected = ["E", "T", "A", "O", "I"];
+ vals = get_column_elements($table, LETTER_FREQ_COLUMN);
+ ok(_.isEqual(vals, expected));
+});
+
+asyncTest("No data-sort means no sort", function(){
+ var NOSORT_COLUMN = 3;
+ var $table = $("#complex");
+ var $table_cols = $table.find("th");
+
+ $table.stupidtable();
+ $table_cols.eq(NOSORT_COLUMN).click();
+
+ test_table_state(function(){
+ var expected = ["arbitrary", "pointless", "silly", "eccentric", "garbage"];
+ var vals = get_column_elements($table, NOSORT_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("data-sort-by values should be used over text values", function(){
+ var LETTER_FREQ_COLUMN = 5;
+ var $table = $("#complex");
+ var $table_cols = $table.find("th");
+
+ $table.stupidtable();
+ $table_cols.eq(LETTER_FREQ_COLUMN).click();
+
+ test_table_state(function(){
+ var expected = ["E", "T", "A", "O", "I"];
+ var vals = get_column_elements($table, LETTER_FREQ_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("case insensitive string sort", function(){
+ var STRING_COLUMN = 2;
+ var $table = $("#complex");
+ var $table_cols = $table.find("th");
+
+ $table.stupidtable();
+ $table_cols.eq(STRING_COLUMN).click();
+
+ test_table_state(function(){
+ var expected = ["a", "fruit", "Homer", "is", "purple"];
+ var vals = get_column_elements($table, STRING_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("custom sort functions", function(){
+ var DATE_COLUMN = 4;
+ var $table = $("#complex");
+ var $table_cols = $table.find("th");
+
+
+ $table.stupidtable({
+ "date":function(a,b){
+ // Get these into date objects for comparison.
+ var aDate = date_from_string(a);
+ var bDate = date_from_string(b);
+
+ return aDate - bDate;
+ }
+ });
+
+ $table_cols.eq(DATE_COLUMN).click();
+ test_table_state(function(){
+ var expected = ["Mar 15, 1986", "Mar 15, 1986", "Sep 15, 2002", "Aug 07, 2004",
+ "Feb 27, 2086"];
+ var vals = get_column_elements($table, DATE_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+
+});
+
+asyncTest("default sort direction - DESC", function(){
+ var FLOAT_COLUMN = 1;
+ var $table = $("#complex");
+ var $table_cols = $table.find("th");
+
+ $table_cols.eq(FLOAT_COLUMN).data('sort-default', 'desc');
+ $table.stupidtable();
+ $table_cols.eq(FLOAT_COLUMN).click();
+
+ test_table_state(function(){
+ var expected = ["88.5", "36", "-.18", "-152.5", "-858"];
+ var vals = get_column_elements($table, FLOAT_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("default sort direction - ASC", function(){
+ var FLOAT_COLUMN = 1;
+ var $table = $("#complex");
+ var $table_cols = $table.find("th");
+
+ $table_cols.eq(FLOAT_COLUMN).data('sort-default', 'asc');
+ $table.stupidtable();
+ $table_cols.eq(FLOAT_COLUMN).click();
+
+ test_table_state(function(){
+ var expected = ["-858", "-152.5", "-.18", "36", "88.5"];
+ var vals = get_column_elements($table, FLOAT_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("sorting should preserve tbody classes", function(){
+ var FLOAT_COLUMN = 1;
+ var $table = $("#complex");
+ var $table_cols = $table.find("th");
+ var $tbody = $table.find("tbody");
+ var tbodyStyleBefore = $tbody.attr("style");
+
+ $table.stupidtable();
+
+ // These are initial values hardcoded in the html. We need to make sure they
+ // aren't changed once we click a column.
+ ok($tbody.hasClass('some-tbody-class'));
+ ok(_.isEqual(tbodyStyleBefore, $tbody.attr("style")));
+
+ $table_cols.eq(FLOAT_COLUMN).click();
+
+ test_table_state(function(){
+ var $table = $("#complex");
+ var $tbody = $table.find("tbody");
+ ok($tbody.hasClass('some-tbody-class'));
+ ok(_.isEqual(tbodyStyleBefore, $tbody.attr("style")));
+ });
+});
+
+asyncTest("Basic colspan table sort column before colspan column", function(){
+ var LETTER_COLUMN = 0;
+ var $table = $("#basic-colspan");
+ var $table_cols = $table.find("th");
+ var $tbody = $table.find("tbody");
+
+ $table.stupidtable();
+ $table_cols.eq(LETTER_COLUMN).click();
+
+ test_table_state(function(){
+ var expected = ["abc", "bcd", "def"];
+ var vals = get_column_elements($table, LETTER_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("Basic colspan table sort column after colspan column", function(){
+ var NUMBER_COLUMN_TH = 2;
+ var NUMBER_COLUMN = 3;
+ var $table = $("#basic-colspan");
+ var $table_cols = $table.find("th");
+ var $tbody = $table.find("tbody");
+
+ $table.stupidtable();
+ $table_cols.eq(NUMBER_COLUMN_TH).click();
+
+ test_table_state(function(){
+ var expected = ["0", "1", "2"];
+ var vals = get_column_elements($table, NUMBER_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("Basic colspan table sort column on colspan column", function(){
+ var COLSPAN_COLUMN = 1;
+ var $table = $("#basic-colspan");
+ var $table_cols = $table.find("th");
+ var $tbody = $table.find("tbody");
+
+ $table.stupidtable();
+ $table_cols.eq(COLSPAN_COLUMN).click();
+
+ test_table_state(function(){
+ var expected = ["X", "Y", "Z"];
+ var vals = get_column_elements($table, COLSPAN_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("Complex colspan table sort - single click", function(){
+ var NUMBER_COLUMN_TH = 3;
+ var NUMBER_COLUMN = 3;
+ var $table = $("#complex-colspan");
+ var $table_cols = $table.find("th");
+ var $tbody = $table.find("tbody");
+
+ $table.stupidtable();
+ $table_cols.eq(NUMBER_COLUMN_TH).click();
+
+ test_table_state(function(){
+ var expected = ["0", "1", "2"];
+ var vals = get_column_elements($table, NUMBER_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("Complex colspan table sort - double click", function(){
+ var NUMBER_COLUMN_TH = 3;
+ var NUMBER_COLUMN = 3;
+ var $table = $("#complex-colspan");
+ var $table_cols = $table.find("th");
+ var $tbody = $table.find("tbody");
+
+ $table.stupidtable();
+ $table_cols.eq(NUMBER_COLUMN_TH).doubleclick();
+
+ test_table_state(function(){
+ var expected = ["2", "1", "0"];
+ var vals = get_column_elements($table, NUMBER_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("Update sort value - same display and sort values - single click", function(){
+ var INT_COLUMN = 0;
+ var $table = $("#basic");
+ var $table_cols = $table.find("th");
+ var $int_column = $table_cols.eq(INT_COLUMN);
+ var $first_int_td = $table.find("tbody tr td").first();
+
+ $table.stupidtable();
+ ok(_.isEqual($first_int_td.text(), "15"));
+
+ $first_int_td.updateSortVal(200);
+ $first_int_td.text("200");
+ $int_column.click();
+
+ test_table_state(function(){
+ var expected = ["-53", "2", "95", "195", "200"];
+ var vals = get_column_elements($table, INT_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("Update sort value - same display and sort values - double click", function(){
+ var INT_COLUMN = 0;
+ var $table = $("#basic");
+ var $table_cols = $table.find("th");
+ var $int_column = $table_cols.eq(INT_COLUMN);
+ var $first_int_td = $table.find("tbody tr td").first();
+
+ $table.stupidtable();
+ ok(_.isEqual($first_int_td.text(), "15"));
+
+ $first_int_td.updateSortVal(200);
+ $first_int_td.text("200");
+ $int_column.doubleclick();
+
+ test_table_state(function(){
+ var expected = ["200", "195", "95", "2", "-53"];
+ var vals = get_column_elements($table, INT_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("Update sort value - different display and sort value - single click", function(){
+ var LETTER_FREQ_COLUMN = 5;
+ var $table = $("#complex");
+ var $table_cols = $table.find("th");
+ var $letter_freq_col = $table_cols.eq(LETTER_FREQ_COLUMN);
+ var $e_td = $table.find("[data-sort-value=0]");
+
+ $table.stupidtable();
+ $letter_freq_col.click();
+
+ ok(_.isEqual($e_td.text(), "E"));
+ ok(_.isEqual($e_td.data('sort-value'), 0));
+
+ $e_td.updateSortVal(10);
+ $e_td.html("<b>YO</b>");
+
+
+ test_table_state(function(){
+ var expected = ["T", "A", "O", "I", "<b>YO</b>"];
+ var vals = get_column_elements($table, LETTER_FREQ_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("Update sort value - different display and sort value - double click", function(){
+ var LETTER_FREQ_COLUMN = 5;
+ var $table = $("#complex");
+ var $table_cols = $table.find("th");
+ var $letter_freq_col = $table_cols.eq(LETTER_FREQ_COLUMN);
+ var $e_td = $table.find("[data-sort-value=0]");
+
+ $table.stupidtable();
+ $letter_freq_col.doubleclick();
+
+ ok(_.isEqual($e_td.text(), "E"));
+ ok(_.isEqual($e_td.data('sort-value'), 0));
+
+ $e_td.updateSortVal(10);
+ $e_td.html("<b>YO</b>");
+
+
+ test_table_state(function(){
+ var expected = ["<b>YO</b>", "I", "O", "A", "T"];
+ var vals = get_column_elements($table, LETTER_FREQ_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("Update sort value - also updates data-sort-value attribute", function(){
+ var LETTER_FREQ_COLUMN = 5;
+ var $table = $("#complex");
+ var $table_cols = $table.find("th");
+ var $letter_freq_col = $table_cols.eq(LETTER_FREQ_COLUMN);
+ var $e_td = $table.find("[data-sort-value=0]");
+
+ $table.stupidtable();
+ $letter_freq_col.doubleclick();
+
+ ok(_.isEqual($e_td.text(), "E"));
+ ok(_.isEqual($e_td.data('sort-value'), 0));
+
+ $e_td.updateSortVal(10);
+ $e_td.html("<b>YO</b>");
+
+
+ test_table_state(function(){
+ var expected = ["<b>YO</b>", "I", "O", "A", "T"];
+ var vals = get_column_elements($table, LETTER_FREQ_COLUMN);
+ ok(_.isEqual(vals, expected));
+ ok(_.isEqual($e_td.attr('data-sort-value'), "10"));
+ });
+});
+
+asyncTest("Update sort value - display value only doesn't add data-sort-value attribute", function(){
+ var INT_COLUMN = 0;
+ var $table = $("#basic");
+ var $table_cols = $table.find("th");
+ var $int_column = $table_cols.eq(INT_COLUMN);
+ var $first_int_td = $table.find("tbody tr td").first();
+
+ $table.stupidtable();
+ ok(_.isEqual($first_int_td.text(), "15"));
+
+ $first_int_td.updateSortVal(200);
+ $first_int_td.text("200");
+ $int_column.click();
+
+ test_table_state(function(){
+ var $first_int_td = $table.find("tbody tr td").first();
+ var expected = ["-53", "2", "95", "195", "200"];
+ var vals = get_column_elements($table, INT_COLUMN);
+
+ ok(_.isEqual(vals, expected));
+ ok(!$first_int_td.attr('data-sort-value'));
+ });
+});
+
+asyncTest("Basic individual column sort - no force direction", function(){
+ var FLOAT_COLUMN = 1;
+ var $table = $("#complex");
+ var $table_cols = $table.find("th");
+
+ // Specify a sorting direction
+ $table_cols.eq(FLOAT_COLUMN).data('sort-default', 'desc');
+ $table.stupidtable();
+
+ $table_cols.eq(FLOAT_COLUMN).stupidsort();
+
+ test_table_state(function(){
+ var expected = ["88.5", "36", "-.18", "-152.5", "-858"];
+ var vals = get_column_elements($table, FLOAT_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+asyncTest("Basic individual column sort - force direction", function(){
+ var FLOAT_COLUMN = 1;
+ var $table = $("#complex");
+ var $table_cols = $table.find("th");
+
+ // Specify a sorting direction
+ $table_cols.eq(FLOAT_COLUMN).data('sort-default', 'desc');
+ $table.stupidtable();
+
+ $table_cols.eq(FLOAT_COLUMN).stupidsort('asc');
+
+ test_table_state(function(){
+ var expected = ["-858", "-152.5", "-.18", "36", "88.5"];
+ var vals = get_column_elements($table, FLOAT_COLUMN);
+ ok(_.isEqual(vals, expected));
+ });
+});
+
+}); //jQuery
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/libjs-jquery-stupidtable.git
More information about the Pkg-javascript-commits
mailing list