--- a/allmakefiles.sh
+++ b/allmakefiles.sh
@@ -964,17 +964,18 @@ toolkit/components/downloads/Makefile
toolkit/components/downloads/src/Makefile
toolkit/components/filepicker/Makefile
toolkit/system/gnome/Makefile
toolkit/components/help/Makefile
toolkit/components/history/Makefile
toolkit/components/history/public/Makefile
toolkit/components/history/src/Makefile
toolkit/components/passwordmgr/Makefile
-toolkit/components/passwordmgr/base/Makefile
+toolkit/components/passwordmgr/public/Makefile
+toolkit/components/passwordmgr/src/Makefile
toolkit/components/passwordmgr/content/Makefile
toolkit/components/passwordmgr/test/Makefile
toolkit/components/places/Makefile
toolkit/components/places/public/Makefile
toolkit/components/places/src/Makefile
toolkit/components/printing/Makefile
toolkit/components/satchel/Makefile
toolkit/components/satchel/public/Makefile
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -1018,16 +1018,19 @@ function delayedStartup()
if (gURLBar)
gURLBar.addEventListener("dragdrop", URLBarOnDrop, true);
gBrowser.addEventListener("pageshow", function(evt) { setTimeout(pageShowEventHandlers, 0, evt); }, true);
window.addEventListener("keypress", ctrlNumberTabSelection, false);
+ // Ensure login manager is up and running.
+ Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager);
+
if (gMustLoadSidebar) {
var sidebar = document.getElementById("sidebar");
var sidebarBox = document.getElementById("sidebar-box");
sidebar.setAttribute("src", sidebarBox.getAttribute("src"));
}
// add bookmark options to context menu for tabs
addBookmarkMenuitems();
--- a/browser/base/content/pageinfo/security.js
+++ b/browser/base/content/pageinfo/security.js
@@ -134,17 +134,17 @@ var security = {
if (win)
win.focus();
else
window.openDialog("chrome://browser/content/preferences/cookies.xul",
"Browser:Cookies", "");
},
/**
- * Open the password manager window
+ * Open the login manager window
*/
viewPasswords : function()
{
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
var win = wm.getMostRecentWindow("Toolkit:PasswordManager");
if (win)
win.focus();
@@ -308,28 +308,22 @@ function hostHasCookies(hostName) {
* Return true iff realm (proto://host:port) (extracted from location) has
* saved passwords
*/
function realmHasPasswords(location) {
if (!location)
return false;
var realm = makeURI(location).prePath;
- var passwordManager = Components.classes["@mozilla.org/passwordmanager;1"]
- .getService(Components.interfaces.nsIPasswordManager);
- var e = passwordManager.enumerator;
- while (e.hasMoreElements()) {
- var next = e.getNext().QueryInterface(Components.interfaces.nsIPassword);
- if (!next)
- continue;
-
- if (realm == next.host)
- return true;
- }
- return false;
+ var passwordManager = Components.classes["@mozilla.org/login-manager;1"]
+ .getService(Components.interfaces.nsILoginManager);
+ var passwords = passwordManager.getAllLogins({});
+
+ // XXX untested
+ return passwords.some(function (login) { return (login.hostname == realm); });
}
/**
* Return the number of previous visits recorded for host before today.
*
* @param host - the domain name to look for in history
*/
function previousVisitCount(host, endTimeReference) {
--- a/browser/base/content/sanitize.js
+++ b/browser/base/content/sanitize.js
@@ -189,34 +189,27 @@ Sanitizer.prototype = {
.getService(Components.interfaces.nsIDownloadManager);
return dlMgr.canCleanUp;
}
},
passwords: {
clear: function ()
{
- var pwmgr = Components.classes["@mozilla.org/passwordmanager;1"]
- .getService(Components.interfaces.nsIPasswordManager);
- var e = pwmgr.enumerator;
- var passwds = [];
- while (e.hasMoreElements()) {
- var passwd = e.getNext().QueryInterface(Components.interfaces.nsIPassword);
- passwds.push(passwd);
- }
-
- for (var i = 0; i < passwds.length; ++i)
- pwmgr.removeUser(passwds[i].host, passwds[i].user);
+ var pwmgr = Components.classes["@mozilla.org/login-manager;1"]
+ .getService(Components.interfaces.nsILoginManager);
+ pwmgr.removeAllLogins();
},
get canClear()
{
- var pwmgr = Components.classes["@mozilla.org/passwordmanager;1"]
- .getService(Components.interfaces.nsIPasswordManager);
- return pwmgr.enumerator.hasMoreElements();
+ var pwmgr = Components.classes["@mozilla.org/login-manager;1"]
+ .getService(Components.interfaces.nsILoginManager);
+ var logins = pwmgr.getAllLogins({});
+ return (logins.length > 0);
}
},
sessions: {
clear: function ()
{
// clear all auth tokens
var sdr = Components.classes["@mozilla.org/security/sdr;1"]
--- a/browser/components/migration/src/Makefile.in
+++ b/browser/components/migration/src/Makefile.in
@@ -50,16 +50,17 @@ USE_STATIC_LIBS = 1
REQUIRES = \
xpcom \
string \
necko \
history \
libreg \
browsercomps \
toolkitcomps \
+ passwordmgr \
pref \
rdf \
satchel \
intl \
unicharutil \
windowwatcher \
dom \
docshell \
--- a/browser/components/migration/src/nsIEProfileMigrator.cpp
+++ b/browser/components/migration/src/nsIEProfileMigrator.cpp
@@ -74,18 +74,18 @@
#include <comdef.h>
#include <shlobj.h>
#include <intshcut.h>
#include "nsIBrowserHistory.h"
#include "nsIGlobalHistory.h"
#include "nsIRDFRemoteDataSource.h"
#include "nsIURI.h"
-#include "nsIPasswordManager.h"
-#include "nsIPasswordManagerInternal.h"
+#include "nsILoginManager.h"
+#include "nsILoginInfo.h"
#include "nsIFormHistory.h"
#include "nsIRDFService.h"
#include "nsIRDFContainer.h"
#include "nsIURL.h"
#ifdef MOZ_PLACES_BOOKMARKS
#include "nsINavBookmarksService.h"
#include "nsBrowserCompsCID.h"
#else
@@ -750,17 +750,17 @@ static GUID IEPStoreSiteAuthGUID = { 0x5
// un:StringData username
//
// Thus to discover the field name for each login we need to first gather up
// all the signons (collecting usernames in the process), then walk the list
// again, looking ONLY at non-URI prefixed subkeys, and searching for each
// username as a value in each such subkey's value list. If we have a match,
// we assume that the subkey (with its uniquifier prefix) is a login field.
//
-// With this information, we call Password Manager's "AddUserFull" method
+// With this information, we call Password Manager's "AddLogin" method
// providing this detail. We don't need to provide the password field name,
// we have no means of retrieving this info from IE, and the Password Manager
// knows to hunt for a password field near the login field if none is specified.
//
// IMPLICATIONS:
// 1) redundant signon entries for non-login forms might be created, but these
// should be benign.
// 2) if the IE user ever clears his Form AutoComplete cache but doesn't clear
@@ -803,26 +803,26 @@ nsIEProfileMigrator::CopyPasswords(PRBoo
// This is simple and straightforward. We iterate through the part of the
// PStore that matches the type GUID defined in IEPStoreSiteAuthGUID and
// a zero subtype GUID. For each item, we check the data for a ':' that
// separates the username and password parts. If there is no ':', we give up.
// After that, we check to see if the name of the item starts with "DPAPI:".
// We bail out if that's the case, because we can't handle those yet.
// However, if everything is all and well, we convert the itemName to a realm
// string that the password manager can work with and save this login
-// via AddUser.
+// via AddLogin.
nsresult
nsIEProfileMigrator::MigrateSiteAuthSignons(IPStore* aPStore)
{
HRESULT hr;
NS_ENSURE_ARG_POINTER(aPStore);
- nsCOMPtr<nsIPasswordManager> pwmgr(do_GetService("@mozilla.org/passwordmanager;1"));
+ nsCOMPtr<nsILoginManager> pwmgr(do_GetService("@mozilla.org/login-manager;1"));
if (!pwmgr)
return NS_OK;
GUID mtGuid = {0};
IEnumPStoreItemsPtr enumItems = NULL;
hr = aPStore->EnumItems(0, &IEPStoreSiteAuthGUID, &mtGuid, 0, &enumItems);
if (SUCCEEDED(hr) && enumItems != NULL) {
LPWSTR itemName = NULL;
@@ -838,32 +838,41 @@ nsIEProfileMigrator::MigrateSiteAuthSign
for (i = 0; i < count; i++)
if (data[i] == ':') {
data[i] = '\0';
if (i + 1 < count)
password = &data[i + 1];
break;
}
- nsAutoString realm(itemName);
- if (Substring(realm, 0, 6).EqualsLiteral("DPAPI:")) // often FTP logins
+ nsAutoString host(itemName), realm;
+ if (Substring(host, 0, 6).EqualsLiteral("DPAPI:")) // often FTP logins
password = NULL; // We can't handle these yet
if (password) {
int idx;
- idx = realm.FindChar('/');
+ idx = host.FindChar('/');
if (idx) {
- realm.Replace(idx, 1, NS_LITERAL_STRING(" ("));
- realm.Append(')');
+ realm.Assign(Substring(host, idx));
+ host.Assign(Substring(host, 0, idx));
}
// XXX: username and password are always ASCII in IPStore?
// If not, are they in UTF-8 or the default codepage? (ref. bug 41489)
- pwmgr->AddUser(NS_ConvertUTF16toUTF8(realm),
- NS_ConvertASCIItoUTF16((char *)data),
- NS_ConvertASCIItoUTF16((char *)password));
+ nsresult rv;
+
+ ncCOMPtr<nsILoginInfo> aLogin (do_CreateInstance(NS_LOGININFO_CONTRACTID, &rv));
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ // TODO: Need to pass in nulls here, but XPCOM whines. Might be able
+ // just pass in EmptyString(), and then force a flush to disk and
+ // reinit, which should correct things in the storage module.
+
+ //aLogin->Init(host, nsnull, realm, data, password, nsnull, nsnull);
+
+ //pwmgr->AddLogin(aLogin);
}
::CoTaskMemFree(data);
}
}
}
return NS_OK;
}
@@ -995,17 +1004,17 @@ nsIEProfileMigrator::ResolveAndMigrateSi
}
}
return NS_OK;
}
void
nsIEProfileMigrator::EnumerateUsernames(const nsAString& aKey, PRUnichar* aData, unsigned long aCount, nsVoidArray* aSignonsFound)
{
- nsCOMPtr<nsIPasswordManagerInternal> pwmgr(do_GetService("@mozilla.org/passwordmanager;1"));
+ nsCOMPtr<nsILoginManager> pwmgr(do_GetService("@mozilla.org/login-manager;1"));
if (!pwmgr)
return;
PRUnichar* cursor = aData;
PRInt32 offset = 0;
PRInt32 signonCount = aSignonsFound->Count();
while (offset < aCount) {
@@ -1013,17 +1022,25 @@ nsIEProfileMigrator::EnumerateUsernames(
// Compare the value at the current cursor position with the collected list of signons
for (PRInt32 i = 0; i < signonCount; ++i) {
SignonData* sd = (SignonData*)aSignonsFound->ElementAt(i);
if (curr.Equals(sd->user)) {
// Bingo! Found a username in the saved data for this item. Now, add a Signon.
nsDependentString usernameStr(sd->user), passStr(sd->pass);
nsDependentCString realm(sd->realm);
- pwmgr->AddUserFull(realm, usernameStr, passStr, aKey, EmptyString());
+
+ nsresult rv;
+
+ nsCOMPtr<nsILoginInfo> aLogin (do_CreateInstance(NS_LOGININFO_CONTRACTID, &rv));
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ aLogin->Init(realm, EmptyString(), nsnull, usernameStr, passStr, aKey, EmptyString());
+
+ pwmgr->AddLogin(aLogin);
}
}
// Advance the cursor
PRInt32 advance = curr.Length() + 1;
cursor += advance; // Advance to next string (length of curr string + 1 PRUnichar for null separator)
offset += advance;
}
--- a/browser/components/migration/src/nsSeamonkeyProfileMigrator.cpp
+++ b/browser/components/migration/src/nsSeamonkeyProfileMigrator.cpp
@@ -34,17 +34,19 @@
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsBrowserProfileMigratorUtils.h"
#include "nsDirectoryServiceDefs.h"
#include "nsICookieManager2.h"
#include "nsIObserverService.h"
-#include "nsIPasswordManagerInternal.h"
+#include "nsILoginInfo.h"
+#include "nsILoginManager.h"
+#include "nsILoginManagerStorage.h"
#include "nsIPrefLocalizedString.h"
#include "nsIPrefService.h"
#include "nsIServiceManager.h"
#include "nsISupportsArray.h"
#include "nsISupportsPrimitives.h"
#include "nsNetCID.h"
#include "nsNetUtil.h"
#include "nsSeamonkeyProfileMigrator.h"
@@ -677,22 +679,50 @@ nsSeamonkeyProfileMigrator::CopyPassword
if (signonsFileName.IsEmpty())
return NS_ERROR_FILE_NOT_FOUND;
NS_ConvertASCIItoUTF16 fileName(signonsFileName);
if (aReplace)
rv = CopyFile(fileName, fileName);
else {
- nsCOMPtr<nsIFile> seamonkeyPasswordsFile;
- mSourceProfile->Clone(getter_AddRefs(seamonkeyPasswordsFile));
- seamonkeyPasswordsFile->Append(fileName);
+ // Get the password manager, which is the destination for the passwords
+ // being migrated. Also create a new instance of the legacy password
+ // storage component, which we'll use to slurp in the signons from
+ // Seamonkey's signons.txt.
+ nsCOMPtr<nsILoginManager> pwmgr(
+ do_GetService("@mozilla.org/login-manager;1"));
+ nsCOMPtr<nsILoginManagerStorage> importer(
+ do_CreateInstance("@mozilla.org/login-manager/storage/legacy;1"));
+
+ nsString pathName;
+ nsCOMPtr<nsIFile> profileDir(do_QueryInterface(mSourceProfile));
+ profileDir->GetPath(pathName);
+
+ importer->InitWithFile(pathName, fileName, EmptyString());
- nsCOMPtr<nsIPasswordManagerInternal> pmi(do_GetService("@mozilla.org/passwordmanager;1"));
- rv = pmi->ReadPasswords(seamonkeyPasswordsFile);
+ nsresult rv;
+ PRUint32 count;
+ nsILoginInfo **logins;
+
+ rv = importer->GetAllLogins(&count, &logins);
+ NS_ENSURE_SUCCESS(rv, rv);
+ for (count--; count >= 0; count--) {
+ pwmgr->AddLogin(logins[count]);
+ }
+ NS_FREE_XPCOM_ISUPPORTS_POINTER_ARRAY(count, logins);
+
+ PRUnichar **hostnames;
+ rv = importer->GetAllDisabledHosts(&count, &hostnames);
+ NS_ENSURE_SUCCESS(rv, rv);
+ for (count--; count >= 0; count--) {
+ pwmgr->SetLoginSavingEnabled(nsDependentString(hostnames[count]),
+ PR_FALSE);
+ }
+ NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(count, hostnames);
}
return rv;
}
nsresult
nsSeamonkeyProfileMigrator::CopyBookmarks(PRBool aReplace)
{
if (aReplace)
--- a/content/html/content/src/nsHTMLFormElement.cpp
+++ b/content/html/content/src/nsHTMLFormElement.cpp
@@ -1256,19 +1256,20 @@ nsHTMLFormElement::AddElement(nsIFormCon
//
// If it is a password control, and the password manager has not yet been
// initialized, initialize the password manager
//
if (!gPasswordManagerInitialized && type == NS_FORM_INPUT_PASSWORD) {
// Initialize the password manager category
gPasswordManagerInitialized = PR_TRUE;
- NS_CreateServicesFromCategory(NS_PASSWORDMANAGER_CATEGORY,
- nsnull,
- NS_PASSWORDMANAGER_CATEGORY);
+ // TODO
+ //NS_CreateServicesFromCategory(NS_PASSWORDMANAGER_CATEGORY,
+ // nsnull,
+ // NS_PASSWORDMANAGER_CATEGORY);
}
// Default submit element handling
if (aChild->IsSubmitControl()) {
// The new child is the default submit if there was not previously
// a default submit element, or if the new child is before the old
// default submit element.
// To speed up parsing, the special case of a form that already
--- a/toolkit/components/passwordmgr/Makefile.in
+++ b/toolkit/components/passwordmgr/Makefile.in
@@ -15,16 +15,17 @@
#
# The Initial Developer of the Original Code is
# Brian Ryner.
# Portions created by the Initial Developer are Copyright (C) 2003
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Brian Ryner <bryner@brianryner.com>
+# Justin Dolske <dolske@mozilla.com>
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
@@ -37,15 +38,15 @@
DEPTH = ../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
-DIRS = base content
+DIRS = public src content
ifdef ENABLE_TESTS
DIRS += test
endif
include $(topsrcdir)/config/rules.mk
--- a/toolkit/components/passwordmgr/content/passwordManager.js
+++ b/toolkit/components/passwordmgr/content/passwordManager.js
@@ -53,91 +53,43 @@ var signonsTreeView = {
rowCount : 0,
setTree : function(tree) {},
getImageSrc : function(row,column) {},
getProgressMode : function(row,column) {},
getCellValue : function(row,column) {},
getCellText : function(row,column) {
var rv="";
if (column.id=="siteCol") {
- rv = signons[row].host;
+ rv = signons[row].hostname;
+ if (signons[row].httpRealm) { rv += " (" + signons[row].httpRealm + ")"; }
} else if (column.id=="userCol") {
- rv = signons[row].user;
+ rv = signons[row].username;
} else if (column.id=="passwordCol") {
rv = signons[row].password;
}
return rv;
},
isSeparator : function(index) { return false; },
isSorted : function() { return false; },
isContainer : function(index) { return false; },
cycleHeader : function(column) {},
getRowProperties : function(row,prop) {},
getColumnProperties : function(column,prop) {},
getCellProperties : function(row,column,prop) {}
};
-function Signon(number, host, user, rawuser, password) {
- this.number = number;
- this.host = host;
- this.user = user;
- this.rawuser = rawuser;
- this.password = password;
-}
function LoadSignons() {
// loads signons into table
- var enumerator = passwordmanager.enumerator;
- var count = 0;
-
- while (enumerator.hasMoreElements()) {
- var nextPassword;
- try {
- nextPassword = enumerator.getNext();
- } catch(e) {
- /* user supplied invalid database key */
- window.close();
- return false;
- }
- nextPassword = nextPassword.QueryInterface(Components.interfaces.nsIPassword);
- var host = nextPassword.host;
- var user;
- var password;
- // try/catch in case decryption fails (invalid signon entry)
- try {
- user = nextPassword.user;
- password = nextPassword.password;
- } catch (e) {
- // hide this entry
- dump("could not decrypt user/password for host " + host + "\n");
- continue;
- }
- var rawuser = user;
-
- // if no username supplied, try to parse it out of the url
- if (user == "") {
- var ioService = Components.classes["@mozilla.org/network/io-service;1"]
- .getService(Components.interfaces.nsIIOService);
- try {
- user = ioService.newURI(host, null, null).username;
- if (user == "") {
- user = "<>";
- }
- } catch(e) {
- user = "<>";
- }
- }
-
- signons[count] = new Signon(count++, host, user, rawuser, password);
- }
+ signons = passwordmanager.getAllLogins({});
signonsTreeView.rowCount = signons.length;
// sort and display the table
signonsTree.treeBoxObject.view = signonsTreeView;
- SignonColumnSort('host');
+ SignonColumnSort('hostname');
// disable "remove all signons" button if there are no signons
var element = document.getElementById("removeAllSignons");
var toggle = document.getElementById("togglePasswords");
if (signons.length == 0 || gSelectUserInUse) {
element.setAttribute("disabled","true");
toggle.setAttribute("disabled","true");
} else {
@@ -221,17 +173,17 @@ function ConfirmShowPasswords() {
// User is also logged out of Software Security Device.
}
return token.isLoggedIn();
}
function FinalizeSignonDeletions() {
for (var s=0; s<deletedSignons.length; s++) {
- passwordmanager.removeUser(deletedSignons[s].host, deletedSignons[s].rawuser);
+ passwordmanager.removeLogin(deletedSignons[s]);
}
deletedSignons.length = 0;
}
function HandleSignonKeyPress(e) {
if (e.keyCode == 46) {
DeleteSignon();
}
--- a/toolkit/components/passwordmgr/content/passwordManager.xul
+++ b/toolkit/components/passwordmgr/content/passwordManager.xul
@@ -63,20 +63,20 @@
<vbox id="savedsignons" flex="1">
<description control="signonsTree">&spiel.signonsstored.label;</description>
<separator class="thin"/>
<tree id="signonsTree" flex="1" style="height: 20em;" hidecolumnpicker="true"
onkeypress="HandleSignonKeyPress(event)"
onselect="SignonSelected();">
<treecols>
<treecol id="siteCol" label="&treehead.site.label;" flex="5"
- onclick="SignonColumnSort('host');" persist="width"/>
+ onclick="SignonColumnSort('hostname');" persist="width"/>
<splitter class="tree-splitter"/>
<treecol id="userCol" label="&treehead.username.label;" flex="2"
- onclick="SignonColumnSort('user');" persist="width"/>
+ onclick="SignonColumnSort('username');" persist="width"/>
<splitter class="tree-splitter"/>
<treecol id="passwordCol" label="&treehead.password.label;" flex="2"
onclick="SignonColumnSort('password');" persist="width"
hidden="true"/>
</treecols>
<treechildren/>
</tree>
<separator class="thin"/>
--- a/toolkit/components/passwordmgr/content/passwordManagerCommon.js
+++ b/toolkit/components/passwordmgr/content/passwordManagerCommon.js
@@ -55,17 +55,18 @@ var deletedRejects = [];
var signonsTree;
var rejectsTree;
var showingPasswords = false;
function Startup() {
// xpconnect to password manager interfaces
- passwordmanager = Components.classes["@mozilla.org/passwordmanager;1"].getService(Components.interfaces.nsIPasswordManager);
+ passwordmanager = Components.classes["@mozilla.org/login-manager;1"]
+ .getService(Components.interfaces.nsILoginManager);
// be prepared to reload the display if anything changes
kObserverService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
kObserverService.addObserver(signonReloadDisplay, "signonChanged", false);
// be prepared to disable the buttons when selectuser dialog is in use
kObserverService.addObserver(signonReloadDisplay, "signonSelectUser", false);
@@ -78,23 +79,23 @@ function Shutdown() {
kObserverService.removeObserver(signonReloadDisplay, "signonSelectUser");
}
var signonReloadDisplay = {
observe: function(subject, topic, state) {
if (topic == "signonChanged") {
if (state == "signons") {
signons.length = 0;
- if (lastSignonSortColumn == "host") {
+ if (lastSignonSortColumn == "hostname") {
lastSignonSortAscending = !lastSignonSortAscending; // prevents sort from being reversed
}
LoadSignons();
} else if (state == "rejects") {
rejects.length = 0;
- if (lastRejectSortColumn == "host") {
+ if (lastRejectSortColumn == "hostname") {
lastRejectSortAscending = !lastRejectSortAscending; // prevents sort from being reversed
}
LoadRejects();
}
} else if (topic == "signonSelectUser") {
if (state == "suspend") {
gSelectUserInUse = true;
document.getElementById("removeSignon").disabled = true;
@@ -249,18 +250,24 @@ function SortTree(tree, view, table, col
return ascending;
}
/**
* Case insensitive string comparator.
*/
function CompareLowerCase(first, second) {
- var firstLower = first.toLowerCase();
- var secondLower = second.toLowerCase();
+ // Are we sorting nsILoginInfo entries or just strings?
+ if (first.hostname) {
+ firstLower = first.hostname.toLowerCase();
+ secondLower = second.hostname.toLowerCase();
+ } else {
+ firstLower = first.toLowerCase();
+ secondLower = second.toLowerCase();
+ }
if (firstLower < secondLower) {
return -1;
}
if (firstLower > secondLower) {
return 1;
}
--- a/toolkit/components/passwordmgr/content/passwordManagerExceptions.js
+++ b/toolkit/components/passwordmgr/content/passwordManagerExceptions.js
@@ -68,24 +68,18 @@ var rejectsTreeView = {
};
function Reject(number, host) {
this.number = number;
this.host = host;
}
function LoadRejects() {
- var enumerator = passwordmanager.rejectEnumerator;
- var count = 0;
- while (enumerator.hasMoreElements()) {
- var nextReject = enumerator.getNext();
- nextReject = nextReject.QueryInterface(Components.interfaces.nsIPassword);
- var host = nextReject.host;
- rejects[count] = new Reject(count++, host);
- }
+ var hosts = passwordmanager.getAllDisabledHosts({});
+ rejects = hosts.map(function(host, i) { return new Reject(i, host); });
rejectsTreeView.rowCount = rejects.length;
// sort and display the table
rejectsTree.treeBoxObject.view = rejectsTreeView;
RejectColumnSort('host');
var element = document.getElementById("removeAllRejects");
if (rejects.length == 0) {
@@ -113,17 +107,17 @@ function DeleteAllRejects() {
DeleteAllFromTree(rejectsTree, rejectsTreeView,
rejects, deletedRejects,
"removeReject", "removeAllRejects");
FinalizeRejectDeletions();
}
function FinalizeRejectDeletions() {
for (var r=0; r<deletedRejects.length; r++) {
- passwordmanager.removeReject(deletedRejects[r].host);
+ passwordmanager.setLoginSavingEnabled(deletedRejects[r].host, true);
}
deletedRejects.length = 0;
}
function HandleRejectKeyPress(e) {
if (e.keyCode == 46) {
DeleteRejectSelected();
}
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/public/Makefile.in
@@ -0,0 +1,53 @@
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is mozilla.org code.
+#
+# The Initial Developer of the Original Code is Mozilla Corporation.
+# Portions created by the Initial Developer are Copyright (C) 2007
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+# Justin Dolske <dolske@mozilla.com> (original author)
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+
+DEPTH = ../../../..
+topsrcdir = @top_srcdir@
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+MODULE = passwordmgr
+XPIDL_MODULE = passwordmgr
+
+XPIDLSRCS = \
+ nsILoginInfo.idl \
+ nsILoginManager.idl \
+ nsILoginManagerStorage.idl \
+ $(NULL)
+
+include $(topsrcdir)/config/rules.mk
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/public/nsILoginInfo.idl
@@ -0,0 +1,147 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Mozilla Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2007
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Justin Dolske <dolske@mozilla.com> (original author)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+#include "nsISupports.idl"
+
+[scriptable, uuid(a437458b-baca-4a71-a839-13861a2fd538)]
+
+/**
+ * An object containing information for a login stored by the
+ * password manager.
+ */
+interface nsILoginInfo : nsISupports {
+ /**
+ * The hostname the login applies to.
+ *
+ * For logins obtained from HTML forms, the login is formatted like
+ * a URL. For example: "http://www.site.com" A port number (":123")
+ * may be appended in some cases.
+ *
+ * For logins obtained from a HTTP or FTP protocol authentication,
+ * the hostname is not a URL format, but does always have the port
+ * number appended. For example "www.site.com:80".
+ */
+ attribute AString hostname;
+
+ /**
+ * The URL a form-based login was submitted to.
+ *
+ * For logins obtained from HTML forms, this field is the |action|
+ * attribute from the |form| element, with the path removed. For
+ * example "http://www.site.com". [Forms with no |action| attribute
+ * default to submitting to their origin URL, so we store that.]
+ *
+ * For logins obtained from a HTTP or FTP protocol authentication,
+ * this field is NULL.
+ */
+ attribute AString formSubmitURL;
+
+ /**
+ * The HTTP Realm a login was requested for.
+ *
+ * When an HTTP server sends a 401 result, the WWW-Authenticate
+ * header includes a realm to identify the "protection space." See
+ * RFC2617.
+ *
+ * For logins obtained from HTML forms, this field is NULL.
+ */
+ attribute AString httpRealm;
+
+ /**
+ * The username for the login.
+ */
+ attribute AString username;
+
+ /**
+ * The |name| attribute for the username input field.
+ *
+ * For logins obtained from a HTTP or FTP protocol authentication,
+ * this field is NULL.
+ */
+ attribute AString usernameField;
+
+ /**
+ * The password for the login.
+ */
+ attribute AString password;
+
+ /**
+ * The |name| attribute for the password input field.
+ *
+ * For logins obtained from a HTTP or FTP protocol authentication,
+ * this field is NULL.
+ */
+ attribute AString passwordField;
+
+ /**
+ * Initialize a newly created nsLoginInfo object.
+ *
+ * The arguments are the fields for the new object.
+ */
+ void init(in AString aHostname,
+ in AString aFormSubmitURL, in AString aHttpRealm,
+ in AString aUsername, in AString aPassword,
+ in AString aUsernameField, in AString aPasswordField);
+
+ /**
+ * Test for equality with another nsILoginInfo object.
+ *
+ * @param aLoginInfo
+ * The other object to test.
+ *
+ * NOTE: The formSubmitURL field is not strictly checked. A blank (but
+ * not NULL) value will match any value (except null) in the other
+ * object's formSubmitURL field. The blank value indicates the login
+ * was stored before bug 360493 was fixed.
+ */
+ boolean equals(in nsILoginInfo aLoginInfo);
+
+ /**
+ * Test for equality with another nsILoginInfo object, with the
+ * password fields ignored.
+ *
+ * @param aLoginInfo
+ * The other object to test.
+ */
+ boolean equalsIgnorePassword(in nsILoginInfo aLoginInfo);
+};
+
+%{C++
+
+#define NS_LOGININFO_CONTRACTID "@mozilla.org/login-manager/loginInfo;1"
+
+%}
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/public/nsILoginManager.idl
@@ -0,0 +1,199 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Mozilla Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2007
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Justin Dolske <dolske@mozilla.com> (original author)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+#include "nsISupports.idl"
+
+interface nsIURI;
+interface nsILoginInfo;
+interface nsIAutoCompleteResult;
+interface nsIDOMHTMLInputElement;
+
+[scriptable, uuid(579f45b7-682f-479f-9085-3f8075488803)]
+
+interface nsILoginManager : nsISupports {
+
+ /**
+ * Store a new login in the login manager.
+ *
+ * @param aLogin
+ * The login to be added.
+ */
+ void addLogin(in nsILoginInfo aLogin);
+
+
+ /**
+ * Remove a login from the login manager.
+ *
+ * @param aLogin
+ * The login to be removed.
+ */
+ void removeLogin(in nsILoginInfo aLogin);
+
+
+ /**
+ * Modify an existing login in the login manager.
+ *
+ * @param aLogin
+ * The login to be modified.
+ */
+ void modifyLogin(in nsILoginInfo oldLogin, in nsILoginInfo newLogin);
+
+
+ /**
+ * Clear all logins known to login manager.
+ *
+ * The browser sanitization feature allows the user to clear any stored
+ * passwords. This interface allows that to be done without gettng each
+ * login first (which might require knowing the master password).
+ *
+ */
+ void removeAllLogins();
+
+
+ /**
+ * Fetch all logins in the login manager. An array is always returned;
+ * if there are no logins the array is empty.
+ *
+ * @param count
+ * The number of elements in the array. JS callers can simply use
+ * the array's .length property, and supply an dummy object for
+ * this out param. For example: |getAllLogins({})|
+ * @param logins
+ * An array of nsILoginInfo objects.
+ *
+ * NOTE: This can be called from JS as:
+ * var logins = pwmgr.getAllLogins({});
+ * (|logins| is an array).
+ */
+ void getAllLogins(out unsigned long count,
+ [retval, array, size_is(count)] out nsILoginInfo logins);
+
+
+ /**
+ * Obtain a list of all hosts for which password saving is disabled.
+ *
+ * @param count
+ * The number of elements in the array. JS callers can simply use
+ * the array's .length property, and supply an dummy object for
+ * this out param. For example: |getAllDisabledHosts({})|
+ * @param hostnames
+ * An array of hostname strings, in origin URL format without a
+ * pathname. For example: "https://www.site.com".
+ *
+ * NOTE: This can be called from JS as:
+ * var logins = pwmgr.getDisabledAllLogins({});
+ */
+ void getAllDisabledHosts(out unsigned long count,
+ [retval, array, size_is(count)] out wstring hostnames);
+
+
+ /**
+ * Check to see if saving logins has been disabled for a host.
+ *
+ * @param aHost
+ * The hostname to check. This argument should be in the origin
+ * URL format, without a pathname. For example: "http://foo.com".
+ */
+ boolean getLoginSavingEnabled(in AString aHost);
+
+
+ /**
+ * Disable (or enable) storing logins for the specified host. When
+ * disabled, the login manager will not prompt to store logins for
+ * that host. Existing logins are not affected.
+ *
+ * @param aHost
+ * The hostname to set. This argument should be in the origin
+ * URL format, without a pathname. For example: "http://foo.com".
+ * @param isEnabled
+ * Specify if saving logins should be enabled (true) or
+ * disabled (false)
+ */
+ void setLoginSavingEnabled(in AString aHost, in boolean isEnabled);
+
+
+ /**
+ * Search for logins matching the specified criteria. Called when looking
+ * for logins that might be applicable to a form or authentication request.
+ *
+ * @param count
+ * The number of elements in the array. JS callers can simply use
+ * the array's .length property, and supply an dummy object for
+ * this out param. For example: |findLogins({}, hostname, ...)|
+ * @param aHostname
+ * The hostname to restict searches to. When looking for form
+ * logins, this argument should be in origin URL format, without
+ * a pathname. For example: "http://www.site.com". For protocol
+ * logins (http//ftp), it should be the hostname with a port
+ * appended. For example: "www.bar.com:443".
+ * @param aActionURL
+ * For form logins, this argument should be the URL to which the
+ * form will be submitted. For protocol logins, specify null.
+ * @param aHttpRealm
+ * For protocol logins, this argument should be the HTTP Realm
+ * for which the login applies. This is obtained from the
+ * WWW-Authenticate header. See RFC2617. For form logins,
+ * specify null.
+ * @param logins
+ * An array of nsILoginInfo objects.
+ *
+ * NOTE: This can be called from JS as:
+ * var logins = pwmgr.findLogins({}, hostname, ...);
+ *
+ */
+ void findLogins(out unsigned long count, in AString aHostname,
+ in AString aActionURL, in AString aHttpRealm,
+ [retval, array, size_is(count)] out nsILoginInfo logins);
+
+
+ /**
+ * Generate results for a userfield autocomplete menu.
+ *
+ * NOTE: This interface is provided for use only by the FormFillController,
+ * which calls it directly. This isn't really ideal, it should
+ * probably be callback registered through the FFC.
+ */
+ nsIAutoCompleteResult autoCompleteSearch(in AString aSearchString,
+ in nsIAutoCompleteResult aPreviousResult,
+ in nsIDOMHTMLInputElement aElement);
+};
+
+%{C++
+
+#define NS_LOGINMANAGER_CONTRACTID "@mozilla.org/login-manager;1"
+
+%}
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/public/nsILoginManagerStorage.idl
@@ -0,0 +1,207 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Mozilla Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2007
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Justin Dolske <dolske@mozilla.com> (original author)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+#include "nsISupports.idl"
+
+interface nsILoginInfo;
+
+[scriptable, uuid(18b5acbd-36dc-496d-9212-6f1a3c068a84)]
+
+/*
+ * NOTE: This interface is intended to be implemented by modules
+ * providing storage mechanisms for the login manager.
+ * Other code should use the login manager's interfaces
+ * (nsILoginManager), and should not call storage modules
+ * directly.
+ */
+interface nsILoginManagerStorage : nsISupports {
+ /**
+ * Initialize the component. Not invoked automatically.
+ */
+ void init();
+
+
+ /**
+ * Initialize the component, but override the default filename
+ * locations. This is primarily used to the unit tests and profile
+ * migration.
+ *
+ * @param aPathname
+ * Directory to use for the input and output files
+ * @param aInputFilename
+ * Filename to read for stored logins.
+ * @param aOutputFilename
+ * If non-null, filename to output logins to.
+ *
+ */
+ void initWithFile(in AString aPathname,
+ in AString aInputFilename, in AString aOutputFilename);
+
+
+ /**
+ * Store a new login.
+ *
+ * @param aLogin
+ * The login to be added.
+ */
+ void addLogin(in nsILoginInfo aLogin);
+
+
+ /**
+ * Remove a login from the login manager.
+ *
+ * @param aLogin
+ * The login to be removed.
+ */
+ void removeLogin(in nsILoginInfo aLogin);
+
+
+ /**
+ * Modify an existing login in the login manager.
+ *
+ * @param aLogin
+ * The login to be modified.
+ */
+ void modifyLogin(in nsILoginInfo oldLogin, in nsILoginInfo newLogin);
+
+
+ /**
+ * Clear all stored logins.
+ *
+ * The browser sanitization feature allows the user to clear any stored
+ * passwords. This interface allows that to be done without gettng each
+ * login first (which might require knowing the master password).
+ *
+ */
+ void removeAllLogins();
+
+
+ /**
+ * Fetch all logins in the login manager. An array is always returned;
+ * if there are no logins the array is empty.
+ *
+ * @param count
+ * The number of elements in the array. JS callers can simply use
+ * the array's .length property, and supply an dummy object for
+ * this out param. For example: |getAllLogins({})|
+ * @param logins
+ * An array of nsILoginInfo objects.
+ *
+ * NOTE: This can be called from JS as:
+ * var logins = pwmgr.getAllLogins({});
+ * (|logins| is an array).
+ */
+ void getAllLogins(out unsigned long count,
+ [retval, array, size_is(count)] out nsILoginInfo logins);
+
+
+ /**
+ * Obtain a list of all hosts for which password saving is disabled.
+ *
+ * @param count
+ * The number of elements in the array. JS callers can simply use
+ * the array's .length property, and supply an dummy object for
+ * this out param. For example: |getAllDisabledHosts({})|
+ * @param hostnames
+ * An array of hostname strings, in origin URL format without a
+ * pathname. For example: "https://www.site.com".
+ *
+ * NOTE: This can be called from JS as:
+ * var logins = pwmgr.getDisabledAllLogins({});
+ */
+ void getAllDisabledHosts(out unsigned long count,
+ [retval, array, size_is(count)] out wstring hostnames);
+
+
+ /**
+ * Check to see if saving logins has been disabled for a host.
+ *
+ * @param aHost
+ * The hostname to check. This argument should be in the origin
+ * URL format, without a pathname. For example: "http://foo.com".
+ */
+ boolean getLoginSavingEnabled(in AString aHost);
+
+
+ /**
+ * Disable (or enable) storing logins for the specified host. When
+ * disabled, the login manager will not prompt to store logins for
+ * that host. Existing logins are not affected.
+ *
+ * @param aHost
+ * The hostname to set. This argument should be in the origin
+ * URL format, without a pathname. For example: "http://foo.com".
+ * @param isEnabled
+ * Specify if saving logins should be enabled (true) or
+ * disabled (false)
+ */
+ void setLoginSavingEnabled(in AString aHost, in boolean isEnabled);
+
+
+ /**
+ * Search for logins matching the specified criteria. Called when looking
+ * for logins that might be applicable to a form or authentication request.
+ *
+ * @param count
+ * The number of elements in the array. JS callers can simply use
+ * the array's .length property, and supply an dummy object for
+ * this out param. For example: |findLogins({}, hostname, ...)|
+ * @param aHostname
+ * The hostname to restict searches to. When looking for form
+ * logins, this argument should be in origin URL format, without
+ * a pathname. For example: "http://www.site.com". For protocol
+ * logins (http//ftp), it should be the hostname with a port
+ * appended. For example: "www.bar.com:443".
+ * @param aActionURL
+ * For form logins, this argument should be the URL to which the
+ * form will be submitted. For protocol logins, specify null.
+ * @param aHttpRealm
+ * For protocol logins, this argument should be the HTTP Realm
+ * for which the login applies. This is obtained from the
+ * WWW-Authenticate header. See RFC2617. For form logins,
+ * specify null.
+ * @param logins
+ * An array of nsILoginInfo objects.
+ *
+ * NOTE: This can be called from JS as:
+ * var logins = pwmgr.findLogins({}, hostname, ...);
+ *
+ */
+ void findLogins(out unsigned long count, in AString aHostname,
+ in AString aActionURL, in AString aHttpRealm,
+ [retval, array, size_is(count)] out nsILoginInfo logins);
+};
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/src/Makefile.in
@@ -0,0 +1,54 @@
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is mozilla.org code.
+#
+# The Initial Developer of the Original Code is Mozilla Corporation.
+# Portions created by the Initial Developer are Copyright (C) 2007
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+# Justin Dolske <dolske@mozilla.com> (original author)
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+
+DEPTH = ../../../..
+topsrcdir = @top_srcdir@
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+MODULE = passwordmgr
+
+EXTRA_COMPONENTS = \
+ nsLoginManager.js \
+ nsLoginManagerPrompter.js \
+ nsLoginInfo.js \
+ storage-Legacy.js \
+ $(NULL)
+
+
+include $(topsrcdir)/config/rules.mk
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/src/nsLoginInfo.js
@@ -0,0 +1,161 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Mozilla Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2007
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Justin Dolske <dolske@mozilla.com> (original author)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+
+function nsLoginInfo() {}
+
+nsLoginInfo.prototype = {
+
+ QueryInterface : function (iid) {
+ var interfaces = [Ci.nsILoginInfo, Ci.nsISupports];
+ if (!interfaces.some( function(v) { return iid.equals(v) } ))
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ return this;
+ },
+
+
+ hostname : null,
+ formSubmitURL : null,
+ httpRealm : null,
+ username : null,
+ password : null,
+ usernameField : null,
+ passwordField : null,
+
+ init : function (aHostname, aFormSubmitURL, aHttpRealm,
+ aUsername, aPassword,
+ aUsernameField, aPasswordField) {
+ this.hostname = aHostname;
+ this.formSubmitURL = aFormSubmitURL;
+ this.httpRealm = aHttpRealm;
+ this.username = aUsername;
+ this.password = aPassword;
+ this.usernameField = aUsernameField;
+ this.passwordField = aPasswordField;
+ },
+
+ equalsIgnorePassword : function (aLogin) {
+ if (this.hostname != aLogin.hostname)
+ return false;
+
+ // If either formSubmitURL is blank (but not null), then match.
+ if (this.formSubmitURL != "" && aLogin.formSubmitURL != "" &&
+ this.formSubmitURL != aLogin.formSubmitURL)
+ return false;
+
+ if (this.httpRealm != aLogin.httpRealm)
+ return false;
+
+ if (this.username != aLogin.username)
+ return false;
+
+ if (this.usernameField != aLogin.usernameField)
+ return false;
+
+ // The .password and .passwordField values are ignored.
+
+ return true;
+ },
+
+ equals : function (aLogin) {
+ if (!this.equalsIgnorePassword(aLogin) ||
+ this.password != aLogin.password ||
+ this.passwordField != aLogin.passwordField)
+ return false;
+
+ return true;
+ }
+
+}; // end of nsLoginInfo implementation
+
+
+
+
+// Boilerplate code for component registration...
+var gModule = {
+ registerSelf: function(componentManager, fileSpec, location, type) {
+ componentManager = componentManager.QueryInterface(
+ Ci.nsIComponentRegistrar);
+ for each (var obj in this._objects)
+ componentManager.registerFactoryLocation(obj.CID,
+ obj.className, obj.contractID,
+ fileSpec, location, type);
+ },
+
+ unregisterSelf: function (componentManager, location, type) {
+ for each (var obj in this._objects)
+ componentManager.unregisterFactoryLocation(obj.CID, location);
+ },
+
+ getClassObject: function(componentManager, cid, iid) {
+ if (!iid.equals(Ci.nsIFactory))
+ throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
+
+ for (var key in this._objects) {
+ if (cid.equals(this._objects[key].CID))
+ return this._objects[key].factory;
+ }
+
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ },
+
+ _objects: {
+ service: {
+ CID : Components.ID("{0f2f347c-1e4f-40cc-8efd-792dea70a85e}"),
+ contractID : "@mozilla.org/login-manager/loginInfo;1",
+ className : "LoginInfo",
+ factory : LoginInfoFactory = {
+ createInstance: function(aOuter, aIID) {
+ if (aOuter != null)
+ throw Components.results.NS_ERROR_NO_AGGREGATION;
+ var svc = new nsLoginInfo();
+ return svc.QueryInterface(aIID);
+ }
+ }
+ }
+ },
+
+ canUnload: function(componentManager) {
+ return true;
+ }
+};
+
+function NSGetModule(compMgr, fileSpec) {
+ return gModule;
+}
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/src/nsLoginManager.js
@@ -0,0 +1,1450 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Mozilla Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2007
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Justin Dolske <dolske@mozilla.com> (original author)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+
+function LoginManager() {
+ this.init();
+}
+
+LoginManager.prototype = {
+
+ QueryInterface : function (iid) {
+ const interfaces = [Ci.nsILoginManager,
+ Ci.nsISupports, Ci.nsISupportsWeakReference];
+ if (!interfaces.some( function(v) { return iid.equals(v) } ))
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ return this;
+ },
+
+
+ /* ---------- private memebers ---------- */
+
+
+ __logService : null, // Console logging service, used for debugging.
+ get _logService() {
+ if (!this.__logService)
+ this.__logService = Cc["@mozilla.org/consoleservice;1"]
+ .getService(Ci.nsIConsoleService);
+ return this.__logService;
+ },
+
+
+ __promptService : null, // Prompt service for user interaction
+ get _promptService() {
+ if (!this.__promptService)
+ this.__promptService = Cc["@mozilla.org/embedcomp/prompt-service;1"]
+ .getService(Ci.nsIPromptService2);
+ return this.__promptService;
+ },
+
+
+ __ioService: null, // IO service for string -> nsIURI conversion
+ get _ioService() {
+ if (!this.__ioService)
+ this.__ioService = Cc["@mozilla.org/network/io-service;1"]
+ .getService(Ci.nsIIOService);
+ return this.__ioService;
+ },
+
+
+ __formFillService : null, // FormFillController, for username autocompleting
+ get _formFillService() {
+ if (!this.__formFillService)
+ this.__formFillService = Cc[
+ "@mozilla.org/satchel/form-fill-controller;1"]
+ .getService(Ci.nsIFormFillController);
+ return this.__formFillService;
+ },
+
+
+ __strBundle : null, // String bundle for L10N
+ get _strBundle() {
+ if (!this.__strBundle) {
+ var bunService = Cc["@mozilla.org/intl/stringbundle;1"]
+ .getService(Ci.nsIStringBundleService);
+ this.__strBundle = bunService.createBundle(
+ "chrome://passwordmgr/locale/passwordmgr.properties");
+ if (!this.__strBundle)
+ throw "String bundle for Login Manager not present!";
+ }
+
+ return this.__strBundle;
+ },
+
+
+ __brandBundle : null, // String bundle for L10N
+ get _brandBundle() {
+ if (!this.__brandBundle) {
+ var bunService = Cc["@mozilla.org/intl/stringbundle;1"]
+ .getService(Ci.nsIStringBundleService);
+ this.__brandBundle = bunService.createBundle(
+ "chrome://branding/locale/brand.properties");
+ if (!this.__brandBundle)
+ throw "Branding string bundle not present!";
+ }
+
+ return this.__brandBundle;
+ },
+
+
+ __storage : null, // Storage component which contains the saved logins
+ get _storage() {
+ if (!this.__storage) {
+ this.__storage = Cc["@mozilla.org/login-manager/storage/legacy;1"]
+ .createInstance(Ci.nsILoginManagerStorage);
+ try {
+ this.__storage.init();
+ } catch (e) {
+ this.log("Initialization of storage component failed: " + e);
+ this.__storage = null;
+ }
+ }
+
+ return this.__storage;
+ },
+
+ _prefBranch : null, // Preferences service
+ _nsLoginInfo : null, // Constructor for nsILoginInfo implementation
+
+ _remember : true, // mirrors signon.rememberSignons preference
+ _debug : false, // mirrors signon.debug
+
+
+ /*
+ * init
+ *
+ * Initialize the Login Manager. Automatically called when service
+ * is created.
+ *
+ * Note: Service created in /browser/base/content/browser.js,
+ * delayedStartup()
+ */
+ init : function () {
+
+ // Cache references to current |this| in utility objects
+ this._webProgressListener._domEventListener = this._domEventListener;
+ this._webProgressListener._pwmgr = this;
+ this._domEventListener._pwmgr = this;
+ this._observer._pwmgr = this;
+
+ // Preferences. Add observer so we get notified of changes.
+ this._prefBranch = Cc["@mozilla.org/preferences-service;1"]
+ .getService(Ci.nsIPrefService).getBranch("signon.");
+ this._prefBranch.QueryInterface(Ci.nsIPrefBranch2);
+ this._prefBranch.addObserver("", this._observer, false);
+
+ // Get current preference values.
+ if (this._prefBranch.prefHasUserValue("debug"))
+ this._debug = this._prefBranch.getBoolPref("debug");
+
+ this._remember = this._prefBranch.getBoolPref("rememberSignons");
+
+
+ // Get constructor for nsILoginInfo
+ this._nsLoginInfo = new Components.Constructor(
+ "@mozilla.org/login-manager/loginInfo;1", Ci.nsILoginInfo);
+
+
+ // Form submit observer checks forms for new logins and pw changes.
+ var observerService = Cc["@mozilla.org/observer-service;1"]
+ .getService(Ci.nsIObserverService);
+ observerService.addObserver(this._observer, "earlyformsubmit", false);
+
+ // WebProgressListener for getting notification of new doc loads.
+ var progress = Cc["@mozilla.org/docloaderservice;1"]
+ .getService(Ci.nsIWebProgress);
+ progress.addProgressListener(this._webProgressListener,
+ Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT);
+
+
+ },
+
+
+ /*
+ * log
+ *
+ * Internal function for logging debug messages to the Error Console window
+ */
+ log : function (message) {
+ if (!this._debug)
+ return;
+ dump("Login Manager: " + message + "\n");
+ this._logService.logStringMessage("Login Manager: " + message);
+ },
+
+
+ /* ---------- Utility objects ---------- */
+
+
+ /*
+ * _observer object
+ *
+ * Internal utility object, implements the nsIObserver interface.
+ * Used to receive notification for: form submission, preference changes.
+ */
+ _observer : {
+ _pwmgr : null,
+
+ QueryInterface : function (iid) {
+ const interfaces = [Ci.nsIObserver, Ci.nsIFormSubmitObserver,
+ Ci.nsISupports, Ci.nsISupportsWeakReference];
+ if (!interfaces.some( function(v) { return iid.equals(v) } ))
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ return this;
+ },
+
+
+ // nsFormSubmitObserver
+ notify : function (formElement, aWindow, actionURI) {
+ this._pwmgr.log("observer notified for form submission.");
+
+ // We're invoked before the content's |onsubmit| handlers, so we
+ // can grab form data before it might be modified (see bug 257781).
+
+ try {
+ this._pwmgr._onFormSubmit(formElement);
+ } catch (e) {
+ this._pwmgr.log("Caught error in onFormSubmit: " + e);
+ }
+
+ return true; // Always return true, or form submt will be canceled.
+ },
+
+ // nsObserver
+ observe : function (subject, topic, data) {
+
+ if (topic == "nsPref:changed") {
+ var prefName = data;
+ this._pwmgr.log("got change to " + prefName + " preference");
+
+ if (prefName == "debug") {
+ // The debug pref is hidden (so no default)
+ if (this._pwmgr._prefBranch.prefHasUserValue("debug"))
+ var debug =
+ this._pwmgr._prefBranch.getBoolPref("debug");
+ else
+ debug = false;
+ this._pwmgr._debug = debug;
+
+ } else if (prefName == "rememberSignons") {
+ this._pwmgr._remember =
+ this._pwmgr._prefBranch.getBoolPref("rememberSignons");
+ } else {
+ this._pwmgr.log("Oops! Pref not handled, change ignored.");
+ }
+ } else {
+ this._pwmgr.log("Oops! Unexpected notification: " + topic);
+ }
+ }
+ },
+
+
+ /*
+ * _webProgressListener object
+ *
+ * Internal utility object, implements nsIWebProgressListener interface.
+ * This is attached to the document loader service, so we get
+ * notifications about all page loads.
+ */
+ _webProgressListener : {
+ _pwmgr : null,
+ _domEventListener : null,
+
+ QueryInterface : function (iid) {
+ const interfaces = [Ci.nsIWebProgressListener,
+ Ci.nsISupports, Ci.nsISupportsWeakReference];
+ if (!interfaces.some( function(v) { return iid.equals(v) } ))
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ return this;
+ },
+
+
+ onStateChange : function (aWebProgress, aRequest,
+ aStateFlags, aStatus) {
+
+ // STATE_START is too early, doc is still the old page.
+ if (!(aStateFlags & Ci.nsIWebProgressListener.STATE_TRANSFERRING))
+ return 0;
+
+ if (!this._pwmgr._remember)
+ return 0;
+
+ var domWin = aWebProgress.DOMWindow;
+ var domDoc = domWin.document;
+
+ // Only process things which might have HTML forms.
+ if (! domDoc instanceof Ci.nsIDOMHTMLDocument)
+ return 0;
+
+ this._pwmgr.log("onStateChange accepted: req = " + (aRequest ?
+ aRequest.name : "(null)") + ", flags = " + aStateFlags);
+
+ // fastback navigation... We won't get a DOMContentLoaded
+ // event again, so process any forms now.
+ if (aStateFlags & Ci.nsIWebProgressListener.STATE_RESTORING) {
+ this._pwmgr.log("onStateChange: restoring document");
+ return this._pwmgr._fillDocument(domDoc);
+ }
+
+ // Add event listener to process page when DOM is complete.
+ this._pwmgr.log("onStateChange: adding dom listeners");
+ domDoc.addEventListener("DOMContentLoaded",
+ this._domEventListener, false);
+ return 0;
+ },
+
+ // stubs for the nsIWebProgressListener interfaces which we don't use.
+ onProgressChange : function() { throw "Unexpected onProgressChange"; },
+ onLocationChange : function() { throw "Unexpected onLocationChange"; },
+ onStatusChange : function() { throw "Unexpected onStatusChange"; },
+ onSecurityChange : function() { throw "Unexpected onSecurityChange"; }
+ },
+
+
+ /*
+ * _domEventListener object
+ *
+ * Internal utility object, implements nsIDOMEventListener
+ * Used to catch certain DOM events needed to properly implement form fill.
+ */
+ _domEventListener : {
+ _pwmgr : null,
+
+ QueryInterface : function (iid) {
+ const interfaces = [Ci.nsIDOMEventListener,
+ Ci.nsISupports, Ci.nsISupportsWeakReference];
+ if (!interfaces.some( function(v) { return iid.equals(v) } ))
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ return this;
+ },
+
+
+ handleEvent : function (event) {
+ this._pwmgr.log("domEventListener: got event " + event.type);
+
+ var doc, inputElement;
+ switch (event.type) {
+ case "DOMContentLoaded":
+ doc = event.target;
+ return this._pwmgr._fillDocument(doc);
+
+ case "DOMAutoComplete":
+ case "blur":
+ inputElement = event.target;
+ return this._pwmgr._fillPassword(inputElement);
+
+ default:
+ this._pwmgr.log("Oops! This event unexpected.");
+ return 0;
+ }
+ }
+ },
+
+
+
+
+ /* ---------- Primary Public interfaces ---------- */
+
+
+
+
+ /*
+ * addLogin
+ *
+ * Add a new login to login storage.
+ */
+ addLogin : function (login) {
+ // Sanity check the login
+ if (login.hostname == null || login.hostname.length == 0)
+ throw "Can't add a login with a null or empty hostname.";
+
+ if (login.username == null || login.username.length == 0)
+ throw "Can't add a login with a null or empty username.";
+
+ if (login.password == null || login.password.length == 0)
+ throw "Can't add a login with a null or empty password.";
+
+ if (!login.httpRealm && !login.formSubmitURL)
+ throw "Can't add a login without a httpRealm or formSubmitURL.";
+
+ // Look for an existing entry.
+ var logins = this.findLogins({}, login.hostname, login.formSubmitURL,
+ login.httpRealm);
+
+ if (logins.some(function(l) { return login.username == l.username }))
+ throw "This login already exists.";
+
+ this.log("Adding login: " + login);
+ return this._storage.addLogin(login);
+ },
+
+
+ /*
+ * removeLogin
+ *
+ * Remove the specified login from the stored logins.
+ */
+ removeLogin : function (login) {
+ this.log("Removing login: " + login);
+ return this._storage.removeLogin(login);
+ },
+
+
+ /*
+ * modifyLogin
+ *
+ * Change the specified login to match the new login.
+ */
+ modifyLogin : function (oldLogin, newLogin) {
+ this.log("Modifying oldLogin: " + oldLogin + " newLogin: " + newLogin);
+ return this._storage.modifyLogin(oldLogin, newLogin);
+ },
+
+
+ /*
+ * getAllLogins
+ *
+ * Get a dump of all stored logins. Used by the login manager UI.
+ *
+ * |count| is only needed for XPCOM.
+ *
+ * Returns an array of logins. If there are no logins, the array is empty.
+ */
+ getAllLogins : function (count) {
+ this.log("Getting a list of all logins");
+ var logins = this._storage.getAllLogins({});
+ count.value = logins.length;
+ return logins;
+ },
+
+
+ /*
+ * clearAllLogins
+ *
+ * Clears all stored logins.
+ */
+ clearAllLogins : function () {
+ this.log("Clearing all logins");
+ this._storage.clearAllLogins();
+ },
+
+ /*
+ * getAllDisabledHosts
+ *
+ * Get a list of all hosts for which logins are disabled.
+ *
+ * |count| is only needed for XPCOM.
+ *
+ * Returns an array of disabled logins. If there are no disabled logins,
+ * the array is empty.
+ */
+ getAllDisabledHosts : function (count) {
+ this.log("Getting a list of all disabled hosts");
+ var hosts = this._storage.getAllDisabledHosts({});
+ count.value = hosts.length;
+ return hosts;
+ },
+
+
+ /*
+ * findLogins
+ *
+ * Search the known logins for entries matching the specified criteria
+ * for a protocol login (eg HTTP Auth).
+ */
+ findLogins : function (count, hostname, formSubmitURL, httpRealm) {
+ this.log("Searching for logins matching host: " + hostname +
+ ", formSubmitURL: " + formSubmitURL + ", httpRealm: " + httpRealm);
+
+ var logins = this._storage.findLogins({}, hostname, formSubmitURL,
+ httpRealm);
+ count.value = logins.length;
+ return logins;
+ },
+
+
+ /*
+ * getLoginSavingEnabled
+ *
+ * Check to see if user has disabled saving logins for the host.
+ */
+ getLoginSavingEnabled : function (host) {
+ this.log("Checking if logins to " + host + " can be saved.");
+ if (!this._remember)
+ return false;
+
+ return this._storage.getLoginSavingEnabled(host);
+ },
+
+
+ /*
+ * setLoginSavingEnabled
+ *
+ * Enable or disable storing logins for the specified host.
+ */
+ setLoginSavingEnabled : function (hostname, enabled) {
+ this.log("Saving logins for " + hostname + " enabled? " + enabled);
+ return this._storage.setLoginSavingEnabled(hostname, enabled);
+ },
+
+
+ /*
+ * autoCompleteSearch
+ *
+ * Yuck. This is called directly by satchel:
+ * nsFormFillController::StartSearch()
+ * [toolkit/components/satchel/src/nsFormFillController.cpp]
+ *
+ * We really ought to have a simple way for code to register an
+ * auto-complete provider, and not have satchel calling pwmgr directly.
+ */
+ autoCompleteSearch : function (aSearchString, aPreviousResult, aElement) {
+ // aPreviousResult & aResult are nsIAutoCompleteResult,
+ // aElement is nsIDOMHTMLInputElement
+
+ if (!this._remember)
+ return false;
+
+ this.log("AutoCompleteSearch invoked. Search is: " + aSearchString);
+
+ var result = null;
+
+ if (aPreviousResult) {
+ this.log("Using previous autocomplete result");
+ result = aPreviousResult;
+
+ // We have a list of results for a shorter search string, so just
+ // filter them further based on the new search string.
+ // Count backwards, because result.matchCount is decremented
+ // when we remove an entry.
+ for (var i = result.matchCount - 1; i >= 0; i--) {
+ var match = result.getValueAt(i);
+
+ // Remove results that are too short, or have different prefix.
+ if (aSearchString.length > match.length ||
+ aSearchString.toLowerCase() !=
+ match.substr(0, aSearchString.length).toLowerCase())
+ {
+ this.log("Removing autocomplete entry '" + match + "'");
+ result.removeValueAt(i, false);
+ }
+ }
+ } else {
+ // XXX The C++ code took care to avoid reentrancy if a
+ // master-password dialog was triggered here, but since
+ // we're decrypting at load time that can't happen right now.
+ this.log("Creating new autocomplete search result.");
+
+ var doc = aElement.ownerDocument;
+ var origin = this._getPasswordOrigin(doc.documentURI);
+ var actionOrigin = this._getActionOrigin(aElement.form);
+
+ var logins = this.findLogins({}, origin, actionOrigin, null);
+ var matchingLogins = [];
+
+ for (i = 0; i < logins.length; i++) {
+ var username = logins[i].username.toLowerCase();
+ if (aSearchString.length <= username.length &&
+ aSearchString.toLowerCase() ==
+ username.substr(0, aSearchString.length))
+ {
+ matchingLogins.push(logins[i]);
+ }
+ }
+ this.log(matchingLogins.length + " autocomplete logins avail.");
+ result = new UserAutoCompleteResult(aSearchString, matchingLogins);
+ }
+
+ return result;
+ },
+
+
+
+
+ /* ------- Internal methods / callbacks for document integration ------- */
+
+
+
+
+ /*
+ * _getPasswordFields
+ */
+ _getPasswordFields : function (form, skipEmptyFields) {
+ // Locate the password fields in the form.
+ var pwFields = [];
+ for (var i = 0; i < form.elements.length; i++) {
+ if (form.elements[i].type != "password")
+ continue;
+
+ if (skipEmptyFields && !form.elements[i].value)
+ continue;
+
+ pwFields[pwFields.length] = {
+ index : i,
+ element : form.elements[i]
+ };
+ }
+
+ // If too few or too many fields, bail out.
+ if (pwFields.length == 0 || pwFields.length > 3)
+ return null;
+
+ return pwFields;
+ },
+
+
+ /*
+ * _onFormSubmit
+ *
+ * Called by the our observer when notified of a form submission.
+ * [Note that this happens before any DOM onsubmit handlers are invoked.]
+ * Looks for a password change in the submitted form, so we can update
+ * our stored password.
+ *
+ * XXX update actionURL of existing login, even if pw not being changed?
+ */
+ _onFormSubmit : function (form) {
+
+ // local helper function
+ function autocompleteDisabled(element) {
+ if (element && element.hasAttribute("autocomplete") &&
+ element.getAttribute("autocomplete").toLowerCase() == "off")
+ return true;
+
+ return false;
+ };
+
+ // local helper function
+ function getUsernameField (passwordFieldIndex) {
+ var usernameField = null;
+
+ // Search backwards to first text field (assume it's the username)
+ for (var i = passwordFieldIndex - 1; i >= 0; i--) {
+ if (form.elements[i].type == "text") {
+ usernameField = form.elements[i];
+ break;
+ }
+ }
+
+ return usernameField;
+ };
+
+ // local helper function
+ function findExistingLogin(pwmgr) {
+ var searchLogin = new pwmgr._nsLoginInfo();
+ searchLogin.init(hostname, formSubmitURL, null,
+ usernameField.value, "",
+ usernameField.name, "");
+
+ // TODO: random note: devmo has conflicting info on Array.some()...
+ // One page says it runs on *every* element, another
+ // says it stops at the first match.
+
+ var logins = pwmgr.findLogins({}, hostname, formSubmitURL, null);
+ var existingLogin;
+ var found = logins.some(function(l) {
+ existingLogin = l;
+ return searchLogin.equalsIgnorePassword(l);
+ });
+
+ return (found ? existingLogin : null);
+ }
+
+
+
+
+ var doc = form.ownerDocument;
+ var win = doc.window;
+
+ // If password saving is disabled (globally or for host), bail out now.
+ if (!this._remember)
+ return;
+
+ var hostname = this._getPasswordOrigin(doc.documentURI);
+ var formSubmitURL = this._getActionOrigin(form)
+ if (!this.getLoginSavingEnabled(hostname)) {
+ this.log("(form submission ignored -- saving is " +
+ "disabled for: " + hostname + ")");
+ return;
+ }
+
+ // Locate the password field(s) in the form. Up to 3 supported.
+ var pwFields = this._getPasswordFields(form, true);
+ if (!pwFields) {
+ this.log("(form submission ignored -- found " + pwFields.length +
+ " fields, can only handle 1-3.)");
+ return;
+ }
+
+ // Locate the username field in the form. We might not find a
+ // username field if the user is already logged in to the site.
+ var usernameField = getUsernameField(pwFields[0].index);
+ if (!usernameField) {
+ this.log("(form submission -- no username field found)");
+ }
+
+
+ // Check for autocomplete=off attribute. We don't use it to prevent
+ // autofilling (for existing logins), but won't save logins when it's
+ // present.
+ if (autocompleteDisabled(form) ||
+ autocompleteDisabled(usernameField) ||
+ autocompleteDisabled(pwFields[0].element) ||
+ (pwFields[1] && autocompleteDisabled(pwFields[1].element)) ||
+ (pwFields[2] && autocompleteDisabled(pwFields[2].element))) {
+ this.log("(form submission ignored -- autocomplete=off found)");
+ return;
+ }
+
+
+ // Try to figure out WTF is in the form based on the password values
+ var pw1 = pwFields[0].element.value;
+ var pw2 = (pwFields[1] ? pwFields[1].element.value : null);
+ var pw3 = (pwFields[2] ? pwFields[2].element.value : null);
+ // By default, assume a 1-password case
+ var oldPasswordField = null, newPasswordField = pwFields[0].element;
+
+ if (pwFields.length == 3) {
+ // Look for two identical passwords, that's the new password
+
+ if (pw1 == pw2 && pw2 == pw3) {
+ // All 3 passwords the same? Weird! Treat as if 1 pw field.
+ pwFields.length = 1;
+ } else if (pw1 == pw2) {
+ newPasswordField = pwFields[0].element;
+ oldPasswordField = pwFields[2].element;
+ } else if (pw2 == pw3) {
+ oldPasswordField = pwFields[0].element;
+ newPasswordField = pwFields[2].element;
+ } else if (pw1 == pw3) {
+ // A bit odd, but could make sense with the right page layout.
+ newPasswordField = pwFields[0].element;
+ oldPasswordField = pwFields[1].element;
+ } else {
+ // We can't tell which of the 3 passwords should be saved.
+ this.log("(form submission ignored -- all 3 pw fields differ)");
+ return;
+ }
+ } else if (pwFields.length == 2) {
+ if (pw1 == pw2) {
+ // Treat as if 1 pw field
+ pwFields.length = 1;
+ } else {
+ // Just assume that the 2nd password is the new password
+ oldPasswordField = pwFields[0].element;
+ newPasswordField = pwFields[1].element;
+ }
+ }
+
+
+ var formLogin = new this._nsLoginInfo();
+ formLogin.init(hostname, formSubmitURL, null,
+ (usernameField ? usernameField.value : null),
+ newPasswordField.value,
+ (usernameField ? usernameField.name : null),
+ newPasswordField.name);
+
+ // If we didn't find a username field, allow the user to select
+ // from a list of applicable logins to update.
+ if (!usernameField) {
+ // Without an oldPasswordField, we can't know for sure if
+ // the user is creating an account or changing a password.
+ if (!oldPasswordField) {
+ this.log("(form submission ignored -- couldn't find a " +
+ "username, and no oldPasswordField found.");
+ return;
+ }
+
+ var ok, username;
+ var logins = pwmgr.findLogins({}, hostname, formSubmitURL, null);
+
+ // XXX we could be smarter here: look for a login matching the
+ // old password value. If there's only one, update it. If there's
+ // more than one we could filter the list (but, edge case: the
+ // login for the pwchange is in pwmgr, but with an outdated
+ // password. and the user has another login, with the same
+ // password as the form login's old password.) ugh.
+
+ if (logins.length == 0) {
+ this.log("(no logins for this host -- pwchange ignored)");
+ return;
+ } else if (logins.length == 1) {
+ username = logins[0].username;
+ ok = _promptToChangePassword(win, username)
+ } else {
+ var usernames = [];
+ logins.forEach(function(l) { usernames.push(l.username); });
+
+ [ok, username] = _promptToChangePasswordWithUsername(
+ win, usernames);
+ }
+
+ if (!ok)
+ return;
+
+ // Now that we know the desired username, find that login and
+ // update the info in our formLogin representation.
+ this.log("Updating password for username " + username);
+
+ var existingLogin;
+ logins.some(function(l) {
+ existingLogin = l;
+ return (l.username == username);
+ });
+
+ formLogin.username = username;
+ formLogin.usernameField = existingLogin.usernameField;
+
+ this.modifyLogin(existingLogin, formLogin);
+
+ return;
+ }
+
+
+ // Look for an existing login that matches the form data (other
+ // than the password, which might be different)
+ existingLogin = findExistingLogin(this);
+ if (existingLogin) {
+ // Change password if needed
+ this.log("Updating password for existing login.");
+ if (existingLogin.password != newPasswordField.value)
+ this.modifyLogin(existingLogin, formLogin);
+
+ return;
+ }
+
+
+ // Prompt user to save a new login.
+ var userChoice = this._promptToSaveLogin(win);
+
+ if (userChoice == 2) {
+ this.log("Disabling " + hostname + " logins by user request.");
+ this.setLoginSavingEnabled(hostname, false);
+ } else if (userChoice == 0) {
+ this.log("Saving login for " + hostname);
+ this.addLogin(formLogin);
+ } else {
+ // userChoice == 1 --> just ignore the login.
+ this.log("Ignoring login.");
+ }
+ },
+
+
+ /*
+ * _getPasswordOrigin
+ *
+ * Get the parts of the URL we want for identification.
+ */
+ _getPasswordOrigin : function (uriString) {
+ var realm = "";
+ try {
+ var uri = this._ioService.newURI(uriString, null, null);
+
+ realm += uri.scheme;
+ realm += "://";
+ realm += uri.hostPort;
+ } catch (e) {
+ // bug 159484 - disallow url types that don't support a hostPort.
+ // (set null to cause throw in the JS above)
+ realm = null;
+ }
+
+ return realm;
+ },
+
+ _getActionOrigin : function (form) {
+ var uriString = form.action;
+
+ // A blank or mission action submits to where it came from.
+ if (uriString == "")
+ uriString = form.baseURI; // ala bug 297761
+
+ return this._getPasswordOrigin(uriString);
+ },
+
+
+ /*
+ * _fillDocument
+ *
+ * Called when a page has loaded. Checks the document for forms,
+ * and for each form checks to see if it can be filled out with a
+ * stored login.
+ */
+ _fillDocument : function (doc) {
+
+ function getElementByName (elements, name) {
+ for (var i = 0; i < elements.length; i++) {
+ var element = elements[i];
+ if (element.name && element.name == name)
+ return element;
+ }
+ return null;
+ };
+
+ /*
+ * Bug 380222...
+ *
+ * CRIKEY! The original C++ code eeds a cleanup. This function is
+ * just a straight conversion to JS, with some changes for interacting
+ * with other parts of pwmgr that have been updated.
+ */
+
+ var forms = doc.forms;
+ if (!forms || forms.length == 0)
+ return;
+
+ var formOrigin = this._getPasswordOrigin(doc.documentURI);
+ var prefillForm = this._prefBranch.getBoolPref("autofillForms");
+
+ this.log("fillDocument found " + forms.length +
+ " forms on " + doc.documentURI);
+
+ // We can auto-prefill the username and password if there is only
+ // one stored login that matches the username and password field names
+ // on the form in question. Note that we only need to worry about a
+ // single login per form.
+
+ for (var i = 0; i < forms.length; i++) {
+ var form = forms[i];
+
+ var firstMatch = null;
+ var attachedToInput = false;
+ var prefilledUser = false;
+ var userField, passField;
+ // Note: C++ code only had |temp| and reused it.
+ var tempUserField = null, tempPassField = null;
+
+
+ var actionOrigin = this._getActionOrigin(form);
+
+ var logins = this.findLogins({}, formOrigin, actionOrigin, null);
+
+ this.log("form[" + i + "]: found " + logins.length +
+ " matching logins.");
+
+ for (var j = 0; j < logins.length; j++) {
+ var login = logins[j];
+
+ if (login.usernameField != "") {
+ var foundNode = getElementByName(form.elements,
+ login.usernameField);
+ var tempUserField = foundNode;
+ }
+
+ var oldUserValue;
+ var userFieldFound = false;
+
+ if (tempUserField) {
+ if (tempUserField.type != "text")
+ continue;
+
+ oldUserValue = tempUserField.value;
+ userField = tempUserField;
+ userFieldFound = true;
+ } else if (login.passwordField == "") {
+ // Happens sometimes when we import passwords from IE since
+ // their form name match is case insensitive. In this case,
+ // we'll just have to do a case insensitive search for the
+ // userField and hope we get something.
+
+ // loop over each form element
+ for (var k = 0; i < form.elements.length; k++) {
+ // |inputField| is |formControl| in C++
+ var inputField = form.elements[k];
+
+ if (inputField.type != "text")
+ continue;
+
+ if (login.usernameField.toLowerCase() ==
+ inputField.name.toLowerCase())
+ {
+ oldUserValue = inputField.value;
+ userField = inputField;
+ foundNode = inputField;
+ login.usernameField = inputField.name;
+ //TODO write modified login to disk
+ userFieldFound = true;
+ break;
+ }
+ }
+ }
+
+ // Bail out if we should be seeing a userField but we're not
+ this.log(".... found userField? " + userFieldFound);
+ if (!userFieldFound && login.usernameField != "")
+ continue;
+
+ if (login.passwordField != "") {
+ foundNode = getElementByName(form.elements,
+ login.passwordField);
+ if (foundNode && foundNode.type != "password")
+ foundNode = null;
+
+ tempPassField = foundNode;
+ } else if (userField) {
+ // No password field name was supplied,
+ // try to locate one in the form, but only if we have
+ // a username field.
+
+ for (var index = 0; index < form.elements.length; index++) {
+ if (form.elements[index].isSameNode(foundNode))
+ break;
+ }
+
+ if (index >= 0) {
+ // Search forwards
+ for (var l = index + 1; l < form.elements.length; l++) {
+ var e = form.elements[l];
+ if (e.type == "password")
+ foundNode = tempPassField = e;
+ }
+ }
+
+ if (!tempPassField && index != 0) {
+ // Search backwards
+ for (l = index - 1; l >= 0; l--) {
+ var e = form.elements[l];
+ if (e.type == "password")
+ foundNode = tempPassField = e;
+ }
+ }
+ }
+
+ this.log(".... found passField? " +
+ (tempPassField ? true : false));
+ if (!tempPassField)
+ continue;
+
+ oldPassValue = tempPassField.value;
+ passField = tempPassField;
+ if (login.passwordField == "")
+ login.passwordField = passField.name;
+
+ if (oldUserValue != "" && prefillForm) {
+ // The page has prefilled a username.
+ // If it matches any of our saved usernames, prefill
+ // the password for that username. If there are
+ // multiple saved usernames, we will also attach the
+ // autocomplete listener.
+
+ prefilledUser = true;
+ if (login.username == oldUserValue)
+ passField.value = login.password;
+ }
+
+ if (firstMatch && userField && !attachedToInput) {
+ // We found more than one possible signon for this form...
+ // Listen for blur and autocomplete events on the username
+ // field so we can attempt to prefill the password after
+ // the user has entered/selected the username.
+
+ this.log(".... found multiple matching logins, " +
+ "attaching autocomplete stuff");
+ this._attachToInput(userField);
+ attachedToInput = true;
+ } else {
+ firstMatch = login;
+ }
+ }
+
+ // If we found more than one match, attachedToInput will be true.
+ // But if we found just one, we need to attach the autocomplete
+ // listener, and fill in the username and password (if the HTML
+ // didn't prefill the username.
+
+ if (firstMatch && !attachedToInput) {
+ if (userField)
+ this._attachToInput(userField);
+
+ if (!prefilledUser && prefillForm) {
+ if (userField)
+ userField.value = firstMatch.username;
+
+ passField.value = firstMatch.password;
+ }
+ }
+
+ // We're done with this form, loop to the next one...
+ }
+ },
+
+
+ /*
+ * _attachToInput
+ *
+ */
+ _attachToInput : function (element) {
+ this.log("attaching autocomplete stuff");
+ element.addEventListener("blur",
+ this._domEventListener, false);
+ element.addEventListener("DOMAutoComplete",
+ this._domEventListener, false);
+ this._formFillService.markAsLoginManagerField(element);
+ },
+
+
+ /*
+ * _fillPassword
+ *
+ * The user has autocompleted a username field, so fill in the password.
+ */
+ _fillPassword : function (usernameField) {
+ this.log("fillPassword autocomplete username: " + usernameField.value);
+
+ var form = usernameField.form;
+ var doc = form.ownerDocument;
+
+ var hostname = this._getPasswordOrigin(doc.documentURI);
+ var formSubmitURL = this._getActionOrigin(form)
+
+ // Find the password field. We should always have at least one,
+ // or else something has gone rather wrong.
+ var pwFields = this._getPasswordFields(form, false);
+ if (!pwFields) {
+ const err = "No password field for autocomplete password fill.";
+
+ // We want to know about this even if debugging is disabled.
+ if (!this._debug)
+ dump(err);
+ else
+ this.log(err);
+
+ return;
+ }
+
+ // XXX: we could do better on forms with 2 or 3 password fields.
+ var passwordField = pwFields[pwFields.length - 1].element;
+
+ // XXX this would really be cleaner if we could get at the
+ // AutoCompleteResult, which has the actual nsILoginInfo for the
+ // username selected.
+
+ // Temporary LoginInfo with the info we know.
+ var currentLogin = new this._nsLoginInfo();
+ currentLogin.init(hostname, formSubmitURL, null,
+ usernameField.value, null,
+ usernameField.name, passwordField.name);
+
+ // Look for a existing login and use its password.
+ var match = null;
+ var logins = this.findLogins({}, hostname, formSubmitURL, null);
+
+ if (!logins.some(function(l) {
+ match = l;
+ return currentLogin.equalsIgnorePassword(l);
+ }))
+ {
+ this.log("Can't find a login for this autocomplete result.");
+ return;
+ }
+
+ this.log("Found a matching login, filling in password.");
+ passwordField.value = match.password;
+ },
+
+
+
+
+
+
+ /* ---------- User Prompts ---------- */
+
+
+
+
+ /*
+ * _promptToSaveLogin
+ *
+ * Called when we detect a new login in a form submission,
+ * asks the user what to do.
+ *
+ * Return values:
+ * 0 - Save the login
+ * 1 - Ignore the login this time
+ * 2 - Never save logins for this site
+ */
+ _promptToSaveLogin : function (aWindow) {
+ const buttonFlags = Ci.nsIPrompt.BUTTON_POS_1_DEFAULT +
+ (Ci.nsIPrompt.BUTTON_TITLE_IS_STRING * Ci.nsIPrompt.BUTTON_POS_0) +
+ (Ci.nsIPrompt.BUTTON_TITLE_IS_STRING * Ci.nsIPrompt.BUTTON_POS_1) +
+ (Ci.nsIPrompt.BUTTON_TITLE_IS_STRING * Ci.nsIPrompt.BUTTON_POS_2);
+
+ var brandShortName =
+ this._brandBundle.GetStringFromName("brandShortName");
+
+ var dialogText = this._getLocalizedString(
+ "savePasswordText", [brandShortName]);
+ var dialogTitle = this._getLocalizedString(
+ "savePasswordTitle");
+ var neverButtonText = this._getLocalizedString(
+ "neverForSiteButtonText");
+ var rememberButtonText = this._getLocalizedString(
+ "rememberButtonText");
+ var notNowButtonText = this._getLocalizedString(
+ "notNowButtonText");
+
+ this.log("Prompting user to save/ignore login");
+ var result = this._promptService.confirmEx(aWindow,
+ dialogTitle, dialogText,
+ buttonFlags, rememberButtonText,
+ notNowButtonText, neverButtonText,
+ null, {});
+ return result;
+ },
+
+
+ /*
+ * _promptToChangePassword
+ *
+ * Called when we think we detect a password change for an existing
+ * login, when the form being submitted contains multiple password
+ * fields.
+ *
+ * Return values:
+ * 0 - Update the stored password
+ * 1 - Do not update the stored password
+ */
+ _promptToChangePassword : function (aWindow, username) {
+ const buttonFlags = Ci.nsIPrompt.STD_YES_NO_BUTTONS;
+
+ var dialogText = this._getLocalizedString(
+ "passwordChangeText", [username]);
+ var dialogTitle = this._getLocalizedString(
+ "passwordChangeTitle");
+
+ var result = this._promptService.confirmEx(aWindow,
+ dialogTitle, dialogText, buttonFlags,
+ null, null, null,
+ null, {});
+ return result;
+ },
+
+
+ /*
+ * _promptToChangePasswordWithUsernames
+ *
+ * Called when we detect a password change in a form submission, but we
+ * don't know which existing login (username) it's for. Asks the user
+ * to select a username and confirm the password change.
+ *
+ * Returns multiple paramaters:
+ * [0] - User's respone to the dialog
+ * 0 = Update the stored password
+ * 1 = Do not update the stored password
+ * [1] - The username selected
+ * (null if [0] is 1)
+ *
+ */
+ _promptToChangePasswordWithUsernames : function (aWindow, usernames) {
+ const buttonFlags = Ci.nsIPrompt.STD_YES_NO_BUTTONS;
+
+ var dialogText = this._getLocalizedString("userSelectText");
+ var dialogTitle = this._getLocalizedString("passwordChangeTitle");
+ var selectedUser = { value: null };
+
+ // If user selects ok, outparam.value is set to the index
+ // of the selected username.
+ var result = this._promptService.select(aWindow,
+ dialogTitle, dialogText,
+ usernames.length, usernames,
+ selectedUser);
+
+ return [result, selectedUser.value];
+ },
+
+
+ /*
+ * _getLocalisedString
+ *
+ * Can be called as:
+ * _getLocalisedString("key1");
+ * _getLocalizedString("key2", ["arg1"]);
+ * _getLocalizedString("key3", ["arg1", "arg2"]);
+ * (etc)
+ *
+ * Returns the localized string for the specified key,
+ * formatted if required.
+ *
+ */
+ _getLocalizedString : function (key, formatArgs) {
+ if (formatArgs)
+ return this._strBundle.formatStringFromName(
+ key, formatArgs, formatArgs.length);
+ else
+ return this._strBundle.GetStringFromName(key);
+ }
+
+}; // end of LoginManager implementation
+
+
+
+
+// nsIAutoCompleteResult implementation
+function UserAutoCompleteResult (aSearchString, matchingLogins) {
+ function loginSort(a,b) {
+ var userA = a.username.toLowerCase();
+ var userB = b.username.toLowerCase();
+
+ if (a < b)
+ return -1;
+
+ if (b > a)
+ return 1;
+
+ return 0;
+ };
+
+ this.searchString = aSearchString;
+ this.logins = matchingLogins.sort(loginSort);
+ this.matchCount = matchingLogins.length;
+
+ if (this.matchCount > 0) {
+ this.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
+ this.defaultIndex = 0;
+ }
+}
+
+UserAutoCompleteResult.prototype = {
+ QueryInterface : function (iid) {
+ const interfaces = [Ci.nsIAutoCompleteResult,
+ Ci.nsISupports, Ci.nsISupportsWeakReference];
+ if (!interfaces.some( function(v) { return iid.equals(v) } ))
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ return this;
+ },
+
+ // private
+ logins : null,
+
+ // Interfaces from idl...
+ searchString : null,
+ searchResult : Ci.nsIAutoCompleteResult.RESULT_NOMATCH,
+ defaultIndex : -1,
+ errorDescription : "",
+ matchCount : 0,
+
+ getValueAt : function (index) {
+ if (index < 0 || index >= this.logins.length)
+ throw "Index out of range.";
+
+ return this.logins[index].username;
+ },
+
+ getCommentAt : function (index) {
+ return "";
+ },
+
+ getStyleAt : function (index) {
+ return "";
+ },
+
+ removeValueAt : function (index, removeFromDB) {
+ if (index < 0 || index >= this.logins.length)
+ throw "Index out of range.";
+
+ var removedLogin = this.logins.splice(index, 1);
+ this.matchCount--;
+ if (this.defaultIndex > this.logins.length)
+ this.defaultIndex--;
+
+ if (removeFromDB) {
+ var pwmgr = Cc["@mozilla.org/login-manager;1"]
+ .getService(Ci.nsILoginManager);
+ pwmgr.removeLogin(removedLogin);
+ }
+ },
+};
+
+
+
+
+// Boilerplate code for component registration...
+var gModule = {
+ registerSelf: function (componentManager, fileSpec, location, type) {
+ componentManager = componentManager.QueryInterface(
+ Ci.nsIComponentRegistrar);
+ for each (var obj in this._objects)
+ componentManager.registerFactoryLocation(obj.CID,
+ obj.className, obj.contractID,
+ fileSpec, location, type);
+ },
+
+ unregisterSelf: function (componentManager, location, type) {
+ for each (var obj in this._objects)
+ componentManager.unregisterFactoryLocation(obj.CID, location);
+ },
+
+ getClassObject: function (componentManager, cid, iid) {
+ if (!iid.equals(Ci.nsIFactory))
+ throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
+
+ for (var key in this._objects) {
+ if (cid.equals(this._objects[key].CID))
+ return this._objects[key].factory;
+ }
+
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ },
+
+ _objects: {
+ service: {
+ CID : Components.ID("{cb9e0de8-3598-4ed7-857b-827f011ad5d8}"),
+ contractID : "@mozilla.org/login-manager;1",
+ className : "LoginManager",
+ factory : LoginManagerFactory = {
+ createInstance: function (aOuter, aIID) {
+ if (aOuter != null)
+ throw Components.results.NS_ERROR_NO_AGGREGATION;
+
+ var svc = new LoginManager();
+
+ return svc.QueryInterface(aIID);
+ }
+ }
+ }
+ },
+
+ canUnload: function (componentManager) {
+ return true;
+ }
+};
+
+function NSGetModule (compMgr, fileSpec) {
+ return gModule;
+}
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/src/nsLoginManagerPrompter.js
@@ -0,0 +1,424 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Mozilla Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2007
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Justin Dolske <dolske@mozilla.com> (original author)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+
+/*
+ * LoginManagerPromptFactory
+ *
+ * Implements nsIPromptFactory
+ *
+ * Invoked by NS_NewAuthPrompter2()
+ * [embedding/components/windowwatcher/src/nsPrompt.cpp]
+ */
+function LoginManagerPromptFactory() {}
+
+LoginManagerPromptFactory.prototype = {
+
+ QueryInterface : function (iid) {
+ const interfaces = [Ci.nsIPromptFactory, Ci.nsISupports];
+ if (!interfaces.some( function(v) { return iid.equals(v) } ))
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ return this;
+ },
+
+ _promptService : null,
+ _pwmgr : null,
+
+ _initialized : false,
+
+ getPrompt : function (aWindow, aIID) {
+
+ if (!this._initialized) {
+ // Login manager service
+ this._pwmgr = Cc["@mozilla.org/login-manager;1"]
+ .getService(Ci.nsILoginManager);
+
+ // Prompt service for user interaction
+ this._promptService = Cc["@mozilla.org/embedcomp/prompt-service;1"]
+ .getService(Ci.nsIPromptService2);
+
+ this._initialized = true;
+ }
+
+ if (!aIID.equals(Ci.nsIAuthPrompt2))
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+
+ var prompter = new LoginManagerPrompter();
+ prompter.init(this._pwmgr, this._promptService, aWindow);
+ prompter.QueryInterface(Ci.nsIAuthPrompt2);
+
+ return prompter;
+ }
+}; // end of LoginManagerPromptFactory implementation
+
+
+
+
+/* ==================== LoginManagerPrompter ==================== */
+
+
+
+
+/*
+ * LoginManagerPrompter
+ *
+ * Implements nsIAuthPrompt2.
+ *
+ * Invoked by a channel for protocol-based authentication (eg HTTP
+ * Authenticate, FTP login)
+ */
+function LoginManagerPrompter() {}
+LoginManagerPrompter.prototype = {
+
+ QueryInterface : function (iid) {
+ var interfaces = [Ci.nsIAuthPrompt2, Ci.nsISupports];
+ if (!interfaces.some( function(v) { return iid.equals(v) } ))
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ return this;
+ },
+
+
+ __logService : null, // Console logging service, used for debugging.
+ get _logService() {
+ if (!this.__logService)
+ this.__logService = Cc["@mozilla.org/consoleservice;1"]
+ .getService(Ci.nsIConsoleService);
+ return this.__logService;
+ },
+
+ _promptService : null,
+ _pwmgr : null,
+ _window : null,
+
+ _debug : false,
+
+
+ init : function (aPWManager, aPromptService, aWindow) {
+ this._pwmgr = aPWManager;
+ this._promptService = aPromptService;
+ this._window = aWindow;
+
+ this.log("===== initialized =====");
+ },
+
+
+ /*
+ * log
+ *
+ * Internal function for logging debug messages to the Error Console window.
+ */
+ log : function (message) {
+ if (!this._debug)
+ return;
+
+ dump("Pwmgr Prompter: " + message + "\n");
+ this._logService.logStringMessage("Pwmgr Prompter: " + message);
+ },
+
+
+ /*
+ * promptAuth
+ *
+ * Implementation of nsIAuthPrompt2.
+ *
+ * nsIChannel aChannel
+ * int aLevel
+ * nsIAuthInformation aAuthInfo
+ * boolean aConfirm
+ */
+ promptAuth : function (aChannel, aLevel, aAuthInfo, aConfirm) {
+ var rememberLogin = false;
+ var selectedLogin = null;
+ var checkboxLabel = null;
+
+ this.log("===== promptAuth called =====");
+
+ var hostname, httpRealm;
+ [hostname, httpRealm] = this._GetAuthKey(aChannel, aAuthInfo);
+
+ if (this._pwmgr.getLoginSavingEnabled(hostname)) {
+ checkboxLabel = this.getLocalizedString("rememberPassword");
+
+
+ var foundLogins = this._pwmgr.findLogins({},
+ hostname, null, httpRealm);
+
+ // XXX Like the original code, we can't deal with multiple
+ // account selection. (bug 227632)
+ if (foundLogins.length > 0) {
+ selectedLogin = foundLogins[0];
+ this._SetAuthInfo(aAuthInfo, selectedLogin.username,
+ selectedLogin.password);
+ rememberLogin = true;
+ }
+ }
+
+ // if checkboxLabel is null, the checkbox won't be shown at all.
+ var checkbox = { value : rememberLogin };
+
+ var ok = this._promptService.promptAuth(this._window, aChannel,
+ aLevel, aAuthInfo, checkboxLabel, checkbox);
+ rememberLogin = checkbox.value;
+
+ if (ok && rememberLogin) {
+ var newLogin = Cc["@mozilla.org/login-manager/loginInfo;1"]
+ .createInstance(Ci.nsILoginInfo);
+ newLogin.init(hostname, null, httpRealm,
+ aAuthInfo.username, aAuthInfo.password,
+ "", "");
+
+ // If we didn't find an existing login, or if the username
+ // changed, save as a new login.
+ if (!selectedLogin ||
+ aAuthInfo.username != selectedLogin.username) {
+
+ // add as new
+ this.log("Adding login for " + aAuthInfo.username +
+ " @ " + hostname + " (" + httpRealm + ")");
+ this._pwmgr.addLogin(newLogin);
+
+ } else if (selectedLogin &&
+ aAuthInfo.password != selectedLogin.password) {
+
+ this.log("Updating password for " + aAuthInfo.username +
+ " @ " + hostname + " (" + httpRealm + ")");
+ // update password
+ this._pwmgr.modifyLogin(foundLogins[0], newLogin);
+
+ } else {
+ this.log("Login unchanged, no further action needed.");
+ return ok;
+ }
+ }
+
+ return ok;
+ },
+
+ asyncPromptAuth : function () {
+ return NS_ERROR_NOT_IMPLEMENTED;
+ },
+
+ // From /netwerk/base/public/nsNetUtil.h....
+ /**
+ * This function is a helper to get a protocol's default port if the
+ * URI does not specify a port explicitly. Returns -1 if protocol has no
+ * concept of ports or if there was an error getting the port.
+ */
+ _GetRealPort : function (aURI) {
+ var port = aURI.port;
+
+ if (port != -1)
+ return port; // explicitly specified
+
+ // Otherwise, we have to get the default port from the protocol handler
+ // Need the scheme first
+ var scheme = aURI.scheme;
+
+ var ioService = Cc["@mozilla.org/network/io-service;1"]
+ .getService(Ci.nsIIOService);
+
+ var handler = ioService.getProtocolHandler(scheme);
+ port = handler.defaultPort;
+
+ return port;
+ },
+
+
+ // From: /embedding/components/windowwatcher/public/nsPromptUtils.h
+ // Args: nsIChannel, nsIAuthInformation, boolean, string, int
+ _GetAuthHostPort : function (aChannel, aAuthInfo) {
+
+ // Have to distinguish proxy auth and host auth here...
+ var flags = aAuthInfo.flags;
+
+ if (flags & (Ci.nsIAuthInformation.AUTH_PROXY)) {
+ // TODO: untested...
+ var proxied = aChannel.QueryInterface(Ci.nsIProxiedChannel);
+ if (!proxied)
+ throw "proxy auth needs nsIProxiedChannel";
+
+ var info = proxied.proxyInfo;
+ if (!info)
+ throw "proxy auth needs nsIProxyInfo";
+
+ var idnhost = info.host;
+ var port = info.port;
+
+ var idnService = Cc["@mozilla.org/network/idn-service;1"]
+ .getService(Ci.nsIIDNService);
+ host = idnService.convertUTF8toACE(idnhost);
+ } else {
+ var host = aChannel.URI.host;
+ var port = this._GetRealPort(aChannel.URI);
+ }
+
+ return [host, port];
+ },
+
+
+ // From: /embedding/components/windowwatcher/public/nsPromptUtils.h
+ // Args: nsIChannel, nsIAuthInformation
+ _GetAuthKey : function (aChannel, aAuthInfo) {
+ var key = "";
+ // HTTP does this differently from other protocols
+ var http = aChannel.QueryInterface(Ci.nsIHttpChannel);
+ if (!http) {
+ key = aChannel.URI.prePath;
+ this.log("_GetAuthKey: got http channel, key is: " + key);
+ return key;
+ }
+
+ var [host, port] = this._GetAuthHostPort(aChannel, aAuthInfo);
+
+ var realm = aAuthInfo.realm;
+
+ key += host;
+ key += ':';
+ key += port;
+
+ this.log("_GetAuthKey got host: " + key + " and realm: " + realm);
+
+ return [key, realm];
+ },
+
+
+ // From: /embedding/components/windowwatcher/public/nsPromptUtils.h
+ // Args: nsIAuthInformation, string, string
+ /**
+ * Given a username (possibly in DOMAIN\user form) and password, parses the
+ * domain out of the username if necessary and sets domain, username and
+ * password on the auth information object.
+ */
+ _SetAuthInfo : function (aAuthInfo, username, password) {
+ var flags = aAuthInfo.flags;
+ if (flags & Ci.nsIAuthInformation.NEED_DOMAIN) {
+ // Domain is separated from username by a backslash
+ var idx = username.indexOf("\\");
+ if (idx == -1) {
+ aAuthInfo.username = username;
+ } else {
+ aAuthInfo.domain = username.substring(0, idx);
+ aAuthInfo.username = username.substring(idx+1);
+ }
+ } else {
+ aAuthInfo.username = username;
+ }
+ aAuthInfo.password = password;
+ },
+
+
+ _bundle : null,
+ getLocalizedString : function (key) {
+
+ if (!this._bundle) {
+ var bunService = Cc["@mozilla.org/intl/stringbundle;1"]
+ .getService(Ci.nsIStringBundleService);
+ this._bundle = bunService.createBundle(
+ "chrome://passwordmgr/locale/passwordmgr.properties");
+
+ if (!this._bundle)
+ throw "String bundle not present!";
+ }
+
+ return this._bundle.GetStringFromName(key);
+ }
+}; // end of LoginManagerPrompter implementation
+
+
+
+
+// Boilerplate code...
+var gModule = {
+ registerSelf: function(componentManager, fileSpec, location, type) {
+ componentManager = componentManager.QueryInterface(
+ Ci.nsIComponentRegistrar);
+ for each (var obj in this._objects)
+ componentManager.registerFactoryLocation(obj.CID,
+ obj.className, obj.contractID,
+ fileSpec, location, type);
+ },
+
+ unregisterSelf: function (componentManager, location, type) {
+ for each (var obj in this._objects)
+ componentManager.unregisterFactoryLocation(obj.CID, location);
+ },
+
+ getClassObject: function(componentManager, cid, iid) {
+ if (!iid.equals(Ci.nsIFactory))
+ throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
+
+ for (var key in this._objects) {
+ if (cid.equals(this._objects[key].CID))
+ return this._objects[key].factory;
+ }
+
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ },
+
+ _objects: {
+ service: {
+ CID : Components.ID("{447fc780-1d28-412a-91a1-466d48129c65}"),
+ contractID : "@mozilla.org/passwordmanager/authpromptfactory;1",
+ className : "LoginManagerPromptFactory",
+ factory : LoginManagerPromptFactory_Factory = {
+ singleton : null,
+ createInstance: function (aOuter, aIID) {
+ if (aOuter != null)
+ throw Components.results.NS_ERROR_NO_AGGREGATION;
+
+ if (this.singleton == null) {
+ var svc = new LoginManagerPromptFactory();
+ this.singleton = svc;
+ } else {
+ svc = this.singleton;
+ }
+ return svc.QueryInterface(aIID);
+ }
+ }
+ }
+ },
+
+ canUnload: function(componentManager) {
+ return true;
+ }
+};
+
+function NSGetModule(compMgr, fileSpec) {
+ return gModule;
+}
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/src/storage-Legacy.js
@@ -0,0 +1,712 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is Mozilla Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2007
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Justin Dolske <dolske@mozilla.com> (original author)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+
+function LoginManagerStorage_legacy() { };
+
+LoginManagerStorage_legacy.prototype = {
+
+ QueryInterface : function (iid) {
+ const interfaces = [Ci.nsILoginManagerStorage, Ci.nsISupports];
+ if (!interfaces.some( function(v) { return iid.equals(v) } ))
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ return this;
+ },
+
+ __logService : null, // Console logging service, used for debugging.
+ get _logService() {
+ if (!this.__logService)
+ this.__logService = Cc["@mozilla.org/consoleservice;1"]
+ .getService(Ci.nsIConsoleService);
+ return this.__logService;
+ },
+
+ __decoderRing : null, // nsSecretDecoderRing service
+ get _decoderRing() {
+ if (!this.__decoderRing)
+ this.__decoderRing = Cc["@mozilla.org/security/sdr;1"]
+ .getService(Ci.nsISecretDecoderRing);
+ return this.__decoderRing;
+ },
+
+ _prefBranch : null, // Preferences service
+
+ _datafile : null, // name of datafile (usually "signons2.txt")
+ _datapath : null, // path to datafile (usually profile directory)
+ _debug : false, // mirrors signon.debug
+
+
+ /*
+ * Core datastructures
+ *
+ * EG: _logins["http://site.com"][0].password
+ * EG: _disabledHosts["never.site.com"]
+ */
+ _logins : null,
+ _disabledHosts : null,
+
+
+ /*
+ * log
+ *
+ * Internal function for logging debug messages to the Error Console.
+ */
+ log : function (message) {
+ if (!this._debug)
+ return;
+ dump("PwMgr Storage: " + message + "\n");
+ this._logService.logStringMessage("PwMgr Storage: " + message);
+ },
+
+
+
+
+ /* ==================== Public Methods ==================== */
+
+
+
+
+ initWithFile : function(aPath, aInputFilename, aOutputFilename) {
+ this._datapath = aPath;
+ this._datafile = aInputFilename;
+
+ this.init();
+
+ if (aOutputFilename && aOutputFilename.length) {
+ this._datafile = aOutputFilename;
+ this._writeFile(aPath, aOutputFilename);
+ }
+ },
+
+ /*
+ * init
+ *
+ * Initialize this storage component and load stored passwords from disk.
+ */
+ init : function () {
+ this._logins = {};
+ this._disabledHosts = {};
+
+ // Connect to the correct preferences branch.
+ this._prefBranch = Cc["@mozilla.org/preferences-service;1"]
+ .getService(Ci.nsIPrefService);
+ this._prefBranch = this._prefBranch.getBranch("signon.");
+ this._prefBranch.QueryInterface(Ci.nsIPrefBranch2);
+
+ if (this._prefBranch.prefHasUserValue("debug"))
+ this._debug = this._prefBranch.getBoolPref("debug");
+
+ // Check to see if the internal PKCS#11 token has been initialized.
+ // If not, set a blank password.
+ var tokenDB = Cc["@mozilla.org/security/pk11tokendb;1"]
+ .getService(Ci.nsIPK11TokenDB);
+
+ var token = tokenDB.getInternalKeyToken();
+ if (token.needsUserInit) {
+ this.log("Initializing key3.db with default blank password.");
+ token.initPassword("");
+ }
+
+ // Get the location of the user's profile.
+ if (!this._datapath) {
+ var DIR_SERVICE = new Components.Constructor(
+ "@mozilla.org/file/directory_service;1", "nsIProperties");
+ this._datapath = (new DIR_SERVICE()).get("ProfD", Ci.nsIFile).path;
+ }
+
+ if (!this._datafile)
+ this._datafile = this._prefBranch.getCharPref("SignonFileName2");
+
+ var importFile = null;
+ if (!this._doesFileExist(this._datapath, this._datafile)) {
+ this.log("SignonFilename2 file does not exist. (file=" +
+ this._datafile + ") path=(" + this._datapath + ")");
+
+ // Try reading the old file
+ importFile = this._prefBranch.getCharPref("SignonFileName");
+ if (!this._doesFileExist(this._datapath, importFile)) {
+ this.log("SignonFilename1 file does not exist. (file=" +
+ importFile + ") path=(" + this._datapath + ")");
+ this.log("Creating new signons file...");
+ importFile = null;
+ this._writeFile(this._datapath, this._datafile);
+ }
+ }
+
+ // Read in the stored login data.
+ if (importFile) {
+ this.log("Importing " + importFile);
+ this._readFile(this._datapath, importFile);
+
+ this._writeFile(this._datapath, this._datafile);
+ } else {
+ this._readFile(this._datapath, this._datafile);
+ }
+ },
+
+
+ /*
+ * addLogin
+ *
+ */
+ addLogin : function (login) {
+ var key = login.hostname;
+
+ // If first entry for key, create an Array to hold it's logins.
+ if (!this._logins[key])
+ this._logins[key] = [];
+
+ this._logins[key].push(login);
+
+ this._writeFile(this._datapath, this._datafile);
+ },
+
+
+ /*
+ * removeLogin
+ *
+ */
+ removeLogin : function (login) {
+ var key = login.hostname;
+ var logins = this._logins[key];
+
+ if (!logins)
+ throw "No logins found for hostname (" + key + ")";
+
+ for (var i = 0; i < logins.length; i++) {
+ if (logins[i].equals(login)) {
+ logins.splice(i, 1); // delete that login from array.
+ break;
+ // Note that if there are duplicate entries, they'll
+ // have to be deleted one-by-one.
+ }
+ }
+
+ // Did we delete all the logins for this host?
+ if (logins.length == 0)
+ delete this._logins[key];
+
+ this._writeFile(this._datapath, this._datafile);
+ },
+
+
+ /*
+ * modifyLogin
+ *
+ */
+ modifyLogin : function (oldLogin, newLogin) {
+ this.removeLogin(oldLogin);
+ this.addLogin(newLogin);
+ },
+
+
+ /*
+ * getAllLogins
+ *
+ * Returns an array of nsAccountInfo.
+ */
+ getAllLogins : function (count) {
+ var result = [];
+
+ // Each entry is an array -- append the array entries to |result|.
+ for each (var hostLogins in this._logins) {
+ result = result.concat(hostLogins);
+ }
+
+ count.value = result.length; // needed for XPCOM
+ return result;
+ },
+
+
+ /*
+ * clearAllLogins
+ *
+ * Clears all logins from storage.
+ */
+ clearAllLogins : function () {
+ this._logins = {};
+ // Disabled hosts kept, as one presumably doesn't want to erase those.
+
+ this._writeFile(this._datapath, this._datafile);
+ },
+
+
+ /*
+ * getAllDisabledHosts
+ *
+ */
+ getAllDisabledHosts : function (count) {
+ var result = [];
+
+ for (var hostname in this._disabledHosts) {
+ result.push(hostname);
+ }
+
+ count.value = result.length; // needed for XPCOM
+ return result;
+ },
+
+
+ /*
+ * getLoginSavingEnabled
+ *
+ */
+ getLoginSavingEnabled : function (hostname) {
+ return !this._disabledHosts[hostname];
+ },
+
+
+ /*
+ * setLoginSavingEnabled
+ *
+ */
+ setLoginSavingEnabled : function (hostname, enabled) {
+ if (enabled)
+ delete this._disabledHosts[hostname];
+ else
+ this._disabledHosts[hostname] = true;
+
+ this._writeFile(this._datapath, this._datafile);
+ },
+
+
+ /*
+ * findLogins
+ *
+ */
+ findLogins : function (count, hostname, formSubmitURL, httpRealm) {
+ var hostLogins = this._logins[hostname];
+ if (hostLogins == null) {
+ count.value = 0;
+ return [];
+ }
+
+ var result = [];
+
+ for each (var login in hostLogins) {
+
+ // If looking for an HTTP login, make sure the httpRealms match.
+ if (httpRealm != login.httpRealm)
+ continue;
+
+ // If looking for a form login, make sure the action URLs match
+ // ...unless the stored login is blank (not null), which means
+ // login was stored before we started keeping the action URL.
+ if (formSubmitURL != login.formSubmitURL &&
+ login.formSubmitURL != "")
+ continue;
+
+ result.push(login);
+ }
+
+ count.value = result.length; // needed for XPCOM
+ return result;
+ },
+
+
+
+
+ /* ==================== Internal Methods ==================== */
+
+
+
+
+ /*
+ * _readFile
+ *
+ */
+ _readFile : function (pathname, filename) {
+ var oldFormat = false;
+ var writeOnFinish = false;
+
+ this.log("Reading passwords from " + pathname + "/" + filename);
+
+ var file = Cc["@mozilla.org/file/local;1"]
+ .createInstance(Ci.nsILocalFile);
+ file.initWithPath(pathname);
+ file.append(filename);
+
+ var inputStream = Cc["@mozilla.org/network/file-input-stream;1"]
+ .createInstance(Ci.nsIFileInputStream);
+ inputStream.init(file, 0x01, -1, null); // RD_ONLY, -1=default perm
+ var lineStream = inputStream.QueryInterface(Ci.nsILineInputStream);
+ var line = { value: "" };
+
+ const STATE = { HEADER : 0, REJECT : 1, REALM : 2,
+ USERFIELD : 3, USERVALUE : 4,
+ PASSFIELD : 5, PASSVALUE : 6, ACTIONURL : 7 };
+ var parseState = STATE.HEADER;
+
+ var nsLoginInfo = new Components.Constructor(
+ "@mozilla.org/login-manager/loginInfo;1", Ci.nsILoginInfo);
+ var processEntry = false;
+
+ do {
+ var hasMore = lineStream.readLine(line);
+
+ switch (parseState) {
+ // Check file header
+ case STATE.HEADER:
+ if (line.value == "#2c") {
+ oldFormat = true;
+ } else if (line.value != "#2d") {
+ this.log("invalid file header (" + line.value + ")");
+ throw "invalid file header in " + filename;
+ // We could disable later writing to file, so we
+ // don't clobber whatever it is. ...however, that
+ // would mean corrupt files are not self-healing.
+ return;
+ }
+ parseState++;
+ break;
+
+ // Line is a hostname for which passwords should never be saved.
+ case STATE.REJECT:
+ if (line.value == ".") {
+ parseState++;
+ break;
+ }
+
+ this._disabledHosts[line.value] = true;
+
+ break;
+
+ // Line is a hostname, saved login(s) will follow
+ case STATE.REALM:
+ var hostrealm = line.value;
+
+ // Format is "http://site.com", with "(some realm)"
+ // appended if it's a HTTP-Auth login.
+ const realmFormat = /^(.+?)( \(.*\))?$/; // XXX .* or .+?
+ var matches = realmFormat.exec(hostrealm);
+
+ var hostname, httpRealm;
+ if (matches && matches.length == 3) {
+ hostname = matches[1];
+ httpRealm = matches[2] ?
+ matches[2].slice(2, -1) : null;
+ } else {
+ if (hostrealm != "") {
+ // Uhoh. This shouldn't happen, but try to deal.
+ this.log("Error parsing host/realm: " + hostrealm);
+ }
+ hostname = hostrealm;
+ httpRealm = null;
+ }
+
+ parseState++;
+ break;
+
+ // Line is the HTML 'name' attribute for the username field
+ // (or "." to indicate end of hostrealm)
+ case STATE.USERFIELD:
+ if (line.value == ".") {
+ parseState = STATE.REALM;
+ break;
+ }
+
+ var entry = new nsLoginInfo();
+ entry.hostname = hostname;
+ entry.httpRealm = httpRealm;
+
+ entry.usernameField = line.value;
+ parseState++;
+ break;
+
+ // Line is a username
+ case STATE.USERVALUE:
+ entry.username = this._decrypt(line.value);
+ parseState++;
+ break;
+
+ // Line is the HTML 'name' attribute for the password field,
+ // with a leading '*' character
+ case STATE.PASSFIELD:
+ entry.passwordField = line.value.substr(1);
+ parseState++;
+ break;
+
+ // Line is a password
+ case STATE.PASSVALUE:
+ entry.password = this._decrypt(line.value);
+ if (oldFormat) {
+ entry.formSubmitURL = "";
+ processEntry = true;
+ parseState = STATE.USERFIELD;
+ } else {
+ parseState++;
+ }
+ break;
+
+ // Line is the action URL
+ case STATE.ACTIONURL:
+ entry.formSubmitURL = line.value;
+ processEntry = true;
+ parseState = STATE.USERFIELD;
+ break;
+
+ }
+
+ if (processEntry) {
+ if (entry.username == "" && entry.password == "") {
+ // Discard bogus entry, and update the file when done.
+ writeOnFinish = true;
+ } else {
+ if (!this._logins[hostname])
+ this._logins[hostname] = [];
+ this._logins[hostname].push(entry);
+ }
+ entry = null;
+ processEntry = false;
+ }
+ } while (hasMore);
+
+ lineStream.close();
+
+ if (writeOnFinish)
+ this._writeFile(pathname, filename);
+
+ return;
+ },
+
+
+ /*
+ * _writeFile
+ *
+ */
+ _writeFile : function (pathname, filename) {
+ function writeLine(data) {
+ data += "\r\n";
+ outputStream.write(data, data.length);
+ }
+
+ this.log("Writing passwords to " + pathname + "/" + filename);
+
+ var file = Cc["@mozilla.org/file/local;1"]
+ .createInstance(Ci.nsILocalFile);
+ file.initWithPath(pathname);
+ file.append(filename);
+
+ var outputStream = Cc["@mozilla.org/network/safe-file-output-stream;1"]
+ .createInstance(Ci.nsIFileOutputStream);
+ outputStream.QueryInterface(Ci.nsISafeOutputStream);
+
+ // WR_ONLY|CREAT|TRUNC
+ outputStream.init(file, 0x02 | 0x08 | 0x20, 0600, null);
+
+ // write file version header
+ writeLine("#2d");
+
+ // write disabled logins list
+ for (var hostname in this._disabledHosts) {
+ writeLine(hostname);
+ }
+
+ // write end-of-reject-list marker
+ writeLine(".");
+
+ for (var hostname in this._logins) {
+ function sortByRealm(a,b) {
+ a = a.httpRealm;
+ b = b.httpRealm;
+
+ if (!a && !b)
+ return 0;
+
+ if (!a || a < b)
+ return -1;
+
+ if (!b || b > a)
+ return 1;
+
+ return 0; // a==b, neither is null
+ }
+
+ // Sort logins by httpRealm. This allows us to group multiple
+ // logins for the same realm together.
+ this._logins[hostname].sort(sortByRealm);
+
+
+ // write each login known for the host
+ var lastRealm = null;
+ var firstEntry = true;
+ for each (var login in this._logins[hostname]) {
+
+ // If this login is for a new realm, start a new entry.
+ if (login.httpRealm != lastRealm || firstEntry) {
+ // end previous entry, if needed.
+ if (!firstEntry)
+ writeLine(".");
+
+ var hostrealm = login.hostname;
+ if (login.httpRealm)
+ hostrealm += " (" + login.httpRealm + ")";
+
+ writeLine(hostrealm);
+ }
+
+ firstEntry = false;
+
+ var encUsername = this._encrypt(login.username);
+ var encPassword = this._encrypt(login.password);
+
+ writeLine((login.usernameField ? login.usernameField : ""));
+ writeLine(encUsername);
+ writeLine("*" +
+ (login.passwordField ? login.passwordField : ""));
+ writeLine(encPassword);
+ writeLine((login.formSubmitURL ? login.formSubmitURL : ""));
+
+ lastRealm = login.httpRealm;
+ }
+
+ // write end-of-host marker
+ writeLine(".");
+ }
+
+ // [if there were no hosts, no end-of-host marker (".") needed]
+
+ outputStream.finish();
+ },
+
+
+ /*
+ * _encrypt
+ *
+ */
+ _encrypt : function (plainText) {
+ return this._decoderRing.encryptString(plainText);
+ },
+
+
+ /*
+ * decrypt
+ *
+ */
+ _decrypt : function (cipherText) {
+ var plainText = null;
+
+ if (cipherText.charAt(0) == '~') {
+ // The pre-Mozilla-1.0 file format obscured entries by
+ // base64-encoding them. These entries are signaled by a leading
+ // '~' character.
+ // This file format is no longer supported.
+
+ throw "!!!!! base64 encoded passwords not supported !!!!!";
+ }
+
+ try {
+ plainText = this._decoderRing.decryptString(cipherText);
+ } catch (e) {
+ this.log("Failed to decrypt string: " + cipherText);
+ }
+
+ return plainText;
+ },
+
+
+ /*
+ * _doesFileExist
+ *
+ */
+ _doesFileExist : function (filepath, filename) {
+ var file = Cc["@mozilla.org/file/local;1"]
+ .createInstance(Ci.nsILocalFile);
+ file.initWithPath(filepath);
+ file.append(filename);
+
+ return file.exists();
+ }
+}; // end of nsLoginManagerStorage_legacy implementation
+
+
+
+
+// Boilerplate code for component registration...
+var gModule = {
+ registerSelf: function(componentManager, fileSpec, location, type) {
+ componentManager = componentManager.QueryInterface(
+ Ci.nsIComponentRegistrar);
+ for each (var obj in this._objects)
+ componentManager.registerFactoryLocation(obj.CID,
+ obj.className, obj.contractID,
+ fileSpec, location, type);
+ },
+
+ unregisterSelf: function (componentManager, location, type) {
+ for each (var obj in this._objects)
+ componentManager.unregisterFactoryLocation(obj.CID, location);
+ },
+
+ getClassObject: function(componentManager, cid, iid) {
+ if (!iid.equals(Ci.nsIFactory))
+ throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
+
+ for (var key in this._objects) {
+ if (cid.equals(this._objects[key].CID))
+ return this._objects[key].factory;
+ }
+
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ },
+
+ _objects: {
+ service: {
+ CID : Components.ID("{e09e4ca6-276b-4bb4-8b71-0635a3a2a007}"),
+ contractID : "@mozilla.org/login-manager/storage/legacy;1",
+ className : "LoginManagerStorage_legacy",
+ factory : aFactory = {
+ createInstance: function(aOuter, aIID) {
+ if (aOuter != null)
+ throw Components.results.NS_ERROR_NO_AGGREGATION;
+ var svc = new LoginManagerStorage_legacy();
+ return svc.QueryInterface(aIID);
+ }
+ }
+ }
+ },
+
+ canUnload: function(componentManager) {
+ return true;
+ }
+};
+
+function NSGetModule(compMgr, fileSpec) {
+ return gModule;
+}
--- a/toolkit/components/passwordmgr/test/Makefile.in
+++ b/toolkit/components/passwordmgr/test/Makefile.in
@@ -58,16 +58,18 @@ MOCHI_TESTS = \
test_basic_form_3pw_1.html \
test_bug_227640.html \
test_bug_242956.html \
test_bug_270558.html \
test_bug_360493_1.html \
test_bug_360493_2.html \
$(NULL)
+XPCSHELL_TESTS = unit
+
# This test doesn't pass because we can't ensure a cross-platform
# event that occurs between DOMContentLoaded and Pageload
# test_bug_221634.html
include $(topsrcdir)/config/rules.mk
# Note: Invoke any additional (non-xpcshell) test programs here.
check::
--- a/toolkit/components/passwordmgr/test/test_0init.html
+++ b/toolkit/components/passwordmgr/test/test_0init.html
@@ -1,72 +1,83 @@
<!DOCTYPE HTML>
<html>
<head>
- <title>Test initialization for Password Manager</title>
+ <title>Test initialization for Login Manager</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
-Password Manager test: initialization.
+Login Manager test: initialization.
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
-/** Test for Password Manger: initialization **/
+/** Test for Login Manager: initialization **/
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
// Get the pwmgr service
-var Cc_pwmgr = Components.classes["@mozilla.org/passwordmanager;1"];
-ok(Cc_pwmgr != null, "Access Cc[@mozilla.org/passwordmanager;1]");
+var Cc_pwmgr = Components.classes["@mozilla.org/login-manager;1"];
+ok(Cc_pwmgr != null, "Access Cc[@mozilla.org/login-manager;1]");
-var Ci_pwmgr = Components.interfaces.nsIPasswordManager;
-ok(Ci_pwmgr != null, "Access Ci.nsIPasswordManager");
+var Ci_pwmgr = Components.interfaces.nsILoginManager;
+ok(Ci_pwmgr != null, "Access Ci.nsILoginManager");
var pwmgr = Cc_pwmgr.getService(Ci_pwmgr);
ok(pwmgr != null, "pwmgr getService()");
// Make sure it's not already initialized somehow
-var count, enum;
-count = 0;
-enum = pwmgr.enumerator;
-while (enum.hasMoreElements()) { count++; enum.getNext(); }
-ok(count == 0, "ensure no pre-existing logins");
-if (count != 0) { throw "Aborting test."; }
+var logins = pwmgr.getAllLogins({});
+ok(logins != null, "getAllLogins()");
+is(logins.length, 0, "ensure no pre-existing logins");
+if (logins.length != 0) { throw "aborting test init -- found existing logins"; }
-count = 0;
-enum = pwmgr.rejectEnumerator;
-while (enum.hasMoreElements()) { count++; enum.getNext(); }
-ok(count == 0, "ensure no pre-existing disabled logins");
-if (count != 0) { throw "Aborting test"; }
+var disabledHosts = pwmgr.getAllDisabledHosts({});
+ok(disabledHosts != null, "getAllDisabledHosts()");
+is(disabledHosts.length, 0, "ensure no pre-existing disabled hosts");
+if (disabledHosts.length != 0) { throw "aborting test init -- found existing disabled hosts"; }
+
+
+// Get nsLoginInfo constructor for simpler code
+var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1", Components.interfaces.nsILoginInfo);
+ok(nsLoginInfo != null, "nsLoginInfo constructor");
-pwmgr = pwmgr.QueryInterface(Components.interfaces.nsIPasswordManagerInternal);
// Add some logins for testing.
-const TESTHOST = "http://localhost:8888";
-for (var u = 1; u <= 15; u++) {
- pwmgr.addUserFull2(TESTHOST, "testuser"+u, "testpass"+u, "uname"+u, "pword"+u, TESTHOST);
+function initLogin(login, username, ufieldName, password, pfieldName, hostname, formSubmitURL) {
+ login.username = username;
+ login.usernameField = ufieldName;
+ login.password = password;
+ login.passwordField = pfieldName;
+ login.hostname = hostname;
+ login.formSubmitURL = formSubmitURL
+ login.httpRealm = null;
+}
+
+for (var u = 1; u <= 10; u++) {
+ // TODO: don't really need |new| here, could even detect possible breakage with refs to user objs
+ login = new nsLoginInfo();
+ ok(login != null, "Adding login #" + u);
+
+ initLogin(login, "testuser"+u, "uname"+u, "testpass"+u, "pword"+u,
+ "http://localhost:8888", "http://localhost:8888");
+
+ pwmgr.addLogin(login);
}
// Simple check to see if everything was added fine.
-count = 0;
-enum = pwmgr.enumerator;
-while (enum.hasMoreElements()) { count++; enum.getNext(); }
-ok(count == 15, "check number of added logins");
-
-count = 0;
-enum = pwmgr.rejectEnumerator;
-while (enum.hasMoreElements()) { count++; enum.getNext(); }
-ok(count == 0, "check no disable logins");
+var logins = pwmgr.getAllLogins({});
+ok(logins != null, "getAllLogins()");
+is(logins.length, 10, "check expected final number of logins");
</script>
</pre>
</body>
</html>
--- a/toolkit/components/passwordmgr/test/test_basic_form.html
+++ b/toolkit/components/passwordmgr/test/test_basic_form.html
@@ -1,19 +1,19 @@
<!DOCTYPE HTML>
<html>
<head>
- <title>Test for Password Manager</title>
+ <title>Test for Login Manager</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
-Password Manager test: simple form fill
+Login Manager test: simple form fill
<p id="display"></p>
<div id="content" style="display: none">
<form action="formtest.js" method="get">
<p>This is form 1.</p>
<input type="text" name="uname1" value="">
<input type="password" name="pword1" value="">
@@ -39,17 +39,17 @@ Password Manager test: simple form fill
<button type="reset"> Reset </button>
</form>
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
-/** Test for Password Manger: form fill, multiple forms. **/
+/** Test for Login Manager: form fill, multiple forms. **/
// Make sure that all forms in a document are processed.
function startTest() {
// Check form 1
is($_("uname1").value, "testuser1", "Checking for filled username1");
is($_("pword1").value, "testpass1", "Checking for filled password1");
--- a/toolkit/components/passwordmgr/test/test_basic_form_0pw.html
+++ b/toolkit/components/passwordmgr/test/test_basic_form_0pw.html
@@ -1,19 +1,19 @@
<!DOCTYPE HTML>
<html>
<head>
- <title>Test for Password Manager</title>
+ <title>Test for Login Manager</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
-Password Manager test: forms with no password fields
+Login Manager test: forms with no password fields
<p id="display"></p>
<div id="content" style="display: none">
<!-- Form with no user field or password field -->
<form action="formtest.js" method="get">
<button type="submit">Submit</button>
<button type="reset"> Reset </button>
@@ -34,17 +34,17 @@ Password Manager test: forms with no pas
<button type="reset"> Reset </button>
</form>
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
-/** Test for Password Manger: form fill, no password fields. **/
+/** Test for Login Manager: form fill, no password fields. **/
function startTest() {
is($_("uname1").value, "", "Checking for unfilled username 1");
SimpleTest.finish();
}
window.onload = startTest;
--- a/toolkit/components/passwordmgr/test/test_basic_form_1pw.html
+++ b/toolkit/components/passwordmgr/test/test_basic_form_1pw.html
@@ -1,19 +1,19 @@
<!DOCTYPE HTML>
<html>
<head>
- <title>Test for Password Manager</title>
+ <title>Test for Login Manager</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
-Password Manager test: forms with 1 password field
+Login Manager test: forms with 1 password field
<p id="display"></p>
<div id="content" style="display: none">
<form action="formtest.js" method="get">
<input type="text" name="uname1" value="">
<input type="text" name="foo1" value="">
<input type="password" name="pword1" value="">
@@ -38,17 +38,17 @@ Password Manager test: forms with 1 pass
<button type="submit">Submit</button>
<button type="reset"> Reset </button>
</form>
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
-/** Test for Password Manger: simple form fill **/
+/** Test for Login Manager: simple form fill **/
function startTest() {
// Check username
is($_("uname1").value, "testuser1", "Checking filled username 1");
// Check password
is($_("pword1").value, "testpass1", "Checking filled password 1");
// Check dummy field just for paranoia's sake
is($_("foo1").value, "", "Checking unused field");
--- a/toolkit/components/passwordmgr/test/test_basic_form_2pw_1.html
+++ b/toolkit/components/passwordmgr/test/test_basic_form_2pw_1.html
@@ -1,19 +1,19 @@
<!DOCTYPE HTML>
<html>
<head>
- <title>Test for Password Manager</title>
+ <title>Test for Login Manager</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
-Password Manager test: forms with 2 password fields (form filling)
+Login Manager test: forms with 2 password fields (form filling)
<p id="display"></p>
<div id="content" style="display: none">
<p>The next three forms are <b>user/pass/pass-new</b>, as all-empty, prefilled user(only), and prefilled user/pass</p>
<form id="form1" onsubmit="return checkSubmit(1)" action="formtest.js" method="get">
<input type="text" name="uname1" value="">
<input type="password" name="pword1" value="">
<input type="password" name="pword1B" value="">
@@ -68,17 +68,17 @@ Password Manager test: forms with 2 pass
<button type="submit">Submit</button>
<button type="reset"> Reset </button>
</form>
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
-/** Test for Password Manger: form fill, 2 password fields **/
+/** Test for Login Manager: form fill, 2 password fields **/
// This test simply checks to make sure pwmgr can autofill forms with 2 password fields.
var numSubmittedForms = 0;
var numStartingLogins = 0;
function startTest() {
// Check for unfilled form 1
--- a/toolkit/components/passwordmgr/test/test_basic_form_2pw_2.html
+++ b/toolkit/components/passwordmgr/test/test_basic_form_2pw_2.html
@@ -1,19 +1,19 @@
<!DOCTYPE HTML>
<html>
<head>
- <title>Test for Password Manager</title>
+ <title>Test for Login Manager</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
-Password Manager test: forms with 2 password fields (adding new logins)
+Login Manager test: forms with 2 password fields (adding new logins)
<p id="display"></p>
<div id="content" style="display: none">
<p>The next three forms are <b>user/pass/pass-new</b>, as all-empty, prefilled user(only), and prefilled user/pass</p>
<form id="form1" onsubmit="return checkSubmit(1)" action="formtest.js" method="get">
<input type="text" name="new-uname1" value="">
<input type="password" name="new-pword1" value="">
<input type="password" name="new-pword1B" value="">
@@ -68,17 +68,17 @@ Password Manager test: forms with 2 pass
<button type="submit">Submit</button>
<button type="reset"> Reset </button>
</form>
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
-/** Test for Password Manger: form fill, 2 password fields **/
+/** Test for Login Manager: form fill, 2 password fields **/
// If a form has two password fields, other things may be going on....
//
// 1 - The user might be creating a new login (2nd field for typo checking)
// 2 - The user is changing their password (old and new password each have field)
//
// This test is for case #1.
@@ -140,17 +140,21 @@ function startTest() {
$_("new-pword5B").value = "newpass5";
// Form 6
//$_("new-uname6").value = "newuser6";
//$_("new-pword6").value = "newpass6";
$_("new-pword6B").value = "newpass6";
var button = getFormSubmitButton(1);
- button.click();
+ //button.click();
+
+ // TODO: form submission checking disabled until we can auto-accept the save-password dialog.
+ // (this test worked with the old password manager because it ignored this case of forms).
+ SimpleTest.finish();
}
// Called by each form's onsubmit handler.
function checkSubmit(formNum) {
numSubmittedForms++;
// End the test at the last form.
@@ -189,31 +193,29 @@ function getFormSubmitButton(formNum) {
return button;
}
// Counts the number of logins currently stored by password manager.
function countLogins() {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
- var count = 0;
- var enum = pwmgr.enumerator;
- while (enum.hasMoreElements()) { count++; enum.getNext(); }
+ var logins = pwmgr.getAllLogins({});
- return count;
+ return logins.length;
}
// Get the pwmgr service
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-var Cc_pwmgr = Components.classes["@mozilla.org/passwordmanager;1"];
-ok(Cc_pwmgr != null, "Access Cc[@mozilla.org/passwordmanager;1]");
+var Cc_pwmgr = Components.classes["@mozilla.org/login-manager;1"];
+ok(Cc_pwmgr != null, "Access Cc[@mozilla.org/login-manager;1]");
-var Ci_pwmgr = Components.interfaces.nsIPasswordManager;
-ok(Ci_pwmgr != null, "Access Ci.nsIPasswordManager");
+var Ci_pwmgr = Components.interfaces.nsILoginManager;
+ok(Ci_pwmgr != null, "Access Ci.nsILoginManager");
var pwmgr = Cc_pwmgr.getService(Ci_pwmgr);
ok(pwmgr != null, "pwmgr getService()");
window.onload = startTest;
SimpleTest.waitForExplicitFinish();
--- a/toolkit/components/passwordmgr/test/test_basic_form_3pw_1.html
+++ b/toolkit/components/passwordmgr/test/test_basic_form_3pw_1.html
@@ -1,19 +1,19 @@
<!DOCTYPE HTML>
<html>
<head>
- <title>Test for Password Manager</title>
+ <title>Test for Login Manager</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
-Password Manager test: forms with 3 password fields (form filling)
+Login Manager test: forms with 3 password fields (form filling)
<p id="display"></p>
<div id="content" style="display: none">
<p>The next three forms are <b>user/pass/passB/passC</b>, as all-empty, preuser(only), and preuser/pass</p>
<form action="formtest.js" method="get">
<input type="text" name="uname1" value="">
<input type="password" name="pword1" value="">
<input type="password" name="pword1B" value="">
@@ -105,17 +105,17 @@ Password Manager test: forms with 3 pass
<button type="submit">Submit</button>
<button type="reset"> Reset </button>
</form>
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
-/** Test for Password Manger: form fill, 3 password fields **/
+/** Test for Login Manager: form fill, 3 password fields **/
// Test to make sure 3-password forms are filled properly.
function startTest() {
// Check form 1
is($_("uname1").value, "testuser1", "Checking username1");
is($_("pword1").value, "testpass1", "Checking password1");
is($_("pword1B").value, "", "Checking password1B");
--- a/toolkit/components/passwordmgr/test/test_bug_221634.html
+++ b/toolkit/components/passwordmgr/test/test_bug_221634.html
@@ -1,36 +1,36 @@
<!DOCTYPE HTML>
<html>
<head>
- <title>Test for Password Manager</title>
+ <title>Test for Login Manager</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body onload="endTest();">
-Password Manager test: 221634
+Login Manager test: 221634
<p id="display"></p>
<div id="content" style="display: none">
<form action="formtest.js" method="get">
<input type="text" name="uname1" value="">
<input type="password" name="pword1" value="">
<button type="submit">Submit</button>
<button type="reset"> Reset</button>
</form>
<img onload="performTest();" src="mlogosm.gif">
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
-/** Test for Password Manger: 221634 (password manager needs to fill in forms before the page finishes loading) **/
+/** Test for Login Manager: 221634 (password manager needs to fill in forms before the page finishes loading) **/
var dclHappened = false;
var testHappened = false;
var pageloadHappened = false;
// We're still loading the page, so make sure nothing has filled in yet.
is($_("uname1").value, "", "Checking unfilled username 1");
is($_("pword1").value, "", "Checking unfilled password 1");
--- a/toolkit/components/passwordmgr/test/test_bug_227640.html
+++ b/toolkit/components/passwordmgr/test/test_bug_227640.html
@@ -1,19 +1,19 @@
<!DOCTYPE HTML>
<html>
<head>
- <title>Test for Password Manager</title>
+ <title>Test for Login Manager</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
-Password Manager test: 227640
+Login Manager test: 227640
<p id="display"></p>
<div id="content" style="display: none">
<!-- no autocomplete for password field -->
<form id="form1" onsubmit="return checkSubmit(1)" method="get">
<input type="text" name="uname1" value="">
<input type="password" name="pword1" value="" autocomplete=off>
@@ -141,17 +141,17 @@ Password Manager test: 227640
<button type="submit">Submit</button>
<button type="reset"> Reset </button>
</form>
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
-/** Test for Password Manger: 227640 (password is saved even when the password field has autocomplete="off") **/
+/** Test for Login Manager: 227640 (password is saved even when the password field has autocomplete="off") **/
// This test ensures that pwmgr does not save a username or password when
// autocomplete=off is present.
var numStartingLogins = 0;
var numSubmittedForms = 0;
function startTest() {
@@ -215,31 +215,29 @@ function getFormSubmitButton(formNum) {
return button;
}
// Counts the number of logins currently stored by password manager.
function countLogins() {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
- var count = 0;
- var enum = pwmgr.enumerator;
- while (enum.hasMoreElements()) { count++; enum.getNext(); }
+ var logins = pwmgr.getAllLogins({});
- return count;
+ return logins.length;
}
// Get the pwmgr service
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-var Cc_pwmgr = Components.classes["@mozilla.org/passwordmanager;1"];
-ok(Cc_pwmgr != null, "Access Cc[@mozilla.org/passwordmanager;1]");
+var Cc_pwmgr = Components.classes["@mozilla.org/login-manager;1"];
+ok(Cc_pwmgr != null, "Access Cc[@mozilla.org/login-manager;1]");
-var Ci_pwmgr = Components.interfaces.nsIPasswordManager;
-ok(Ci_pwmgr != null, "Access Ci.nsIPasswordManager");
+var Ci_pwmgr = Components.interfaces.nsILoginManager;
+ok(Ci_pwmgr != null, "Access Ci.nsILoginManager");
var pwmgr = Cc_pwmgr.getService(Ci_pwmgr);
ok(pwmgr != null, "pwmgr getService()");
window.onload = startTest;
SimpleTest.waitForExplicitFinish();
--- a/toolkit/components/passwordmgr/test/test_bug_242956.html
+++ b/toolkit/components/passwordmgr/test/test_bug_242956.html
@@ -1,19 +1,19 @@
<!DOCTYPE HTML>
<html>
<head>
- <title>Test for Password Manager</title>
+ <title>Test for Login Manager</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
-Password Manager test: 242956
+Login Manager test: 242956
<p id="display"></p>
<div id="content" style="display: none">
<!-- pword1 is not a type=password input -->
<form action="formtest.js" method="get">
<input type="text" name="uname1" value="">
<input type="text" name="pword1" value="">
<button type="submit">Submit</button>
@@ -104,17 +104,17 @@ Password Manager test: 242956
<button type="submit">Submit</button>
<button type="reset"> Reset </button>
</form>
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
-/** Test for Password Manger: 242956 (Stored password is inserted into a readable text input on a second page) **/
+/** Test for Login Manager: 242956 (Stored password is inserted into a readable text input on a second page) **/
// Make sure that pwmgr only puts passwords into type=password <input>s.
// Might as well test the converse, too (username in password field).
function startTest() {
for (var i = 1; i <= 8; i++) {
if (i >= 3 && i <= 6) { continue; } // handle these below.
// Check form i
@@ -140,44 +140,40 @@ function startTest() {
is(input.name, "pword3", "confirming legit password field 3 type");
//is(input.value, "testpass3", "checking legit password field 3 value");
todo(input.value == "testpass3", "ignore bogus <input> and fill testpass3");
form = document.forms[3];
input = form.elements[0];
is(input.type, "text", "confirming user field 4 type");
is(input.name, "uname4", "confirming user field 4 name");
- //is(input.value, "testuser4", "checking user field 4 value");
- todo(input.value == "testuser4", "ignore bogus <input> and fill testuser4");
+ is(input.value, "testuser4", "checking user field 4 value");
input = form.elements[1];
is(input.type, "password", "confirming legit password field 4 type");
is(input.name, "pword4", "confirming legit password field 4 type");
- //is(input.value, "testpass4", "checking legit password field 4 value");
- todo(input.value == "testpass4", "ignore bogus <input> and fill testpass4");
+ is(input.value, "testpass4", "checking legit password field 4 value");
input = form.elements[2];
is(input.type, "text", "confirming bogus password field 4 type");
is(input.name, "pword4", "confirming bogus password field 4 name");
is(input.value, "", "checking bogus password field 4 value");
// Forms 5 and 6 have two username inputs with the same name
form = document.forms[4];
input = form.elements[0];
is(input.type, "text", "confirming legit user field 5 type");
is(input.name, "uname5", "confirming legit user field 5 name");
- //is(input.value, "testuser5", "checking legit user field 5 value");
- todo(input.value == "testuser5", "ignore bogus <input> and fill testuser5");
+ is(input.value, "testuser5", "checking legit user field 5 value");
input = form.elements[1];
is(input.type, "password", "confirming bogus user field 5 type");
is(input.name, "uname5", "confirming bogus user field 5 name");
is(input.value, "", "checking bogus user field 5 value");
input = form.elements[2];
is(input.type, "password", "confirming password field 5 ");
is(input.name, "pword5", "confirming password field 5 ");
- //is(input.value, "testpass5", "checking password field 5 value");
- todo(input.value == "testpass5", "ignore bogus <input> and fill testpass5");
+ is(input.value, "testpass5", "checking password field 5 value");
form = document.forms[5];
input = form.elements[0];
is(input.type, "password", "confirming bogus user field 6 type");
is(input.name, "uname6", "confirming bogus user field 6 name");
is(input.value, "", "checking bogus user field 6 value");
input = form.elements[1];
is(input.type, "text", "confirming legit user field 6 type");
--- a/toolkit/components/passwordmgr/test/test_bug_270558.html
+++ b/toolkit/components/passwordmgr/test/test_bug_270558.html
@@ -1,19 +1,19 @@
<!DOCTYPE HTML>
<html>
<head>
- <title>Test for Password Manager</title>
+ <title>Test for Login Manager</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
-Password Manager test: 270558
+Login Manager test: 270558
<p id="display"></p>
<div id="content" style="display: none">
<!-- normal, simple form. -->
<form action="formtest.js" method="get">
<input type="text" name="uname1" value="">
<input type="password" name="pword1" value="">
@@ -86,17 +86,17 @@ Password Manager test: 270558
<!-- TODO: test when multiple matching accounts are known -->
<!-- TODO: test with prefilled known login for some other site and/or action url. -->
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
-/** Test for Password Manger: 270558 (Password manager should not fill in username and
+/** Test for Login Manager: 270558 (Password manager should not fill in username and
password if the username field is pre-filled by the server to a different username.
(frequent problem with phpBB admin interface)) **/
// This test ensures pwmgr will not overwrite a prefilled username or password.
function startTest() {
// These form are partially filled with correct login info.
for (var i = 1; i <= 4; i++) {
--- a/toolkit/components/passwordmgr/test/test_bug_360493_1.html
+++ b/toolkit/components/passwordmgr/test/test_bug_360493_1.html
@@ -1,19 +1,19 @@
<!DOCTYPE HTML>
<html>
<head>
- <title>Test for Password Manager</title>
+ <title>Test for Login Manager</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
-Password Manager test: 360493
+Login Manager test: 360493
<p id="display"></p>
<div id="content" style="display: none">
<!-- normal form with normal relative action. -->
<form action="formtest.js" method="get">
<input type="text" name="uname1" value="">
<input type="password" name="pword1" value="">
@@ -103,17 +103,17 @@ Password Manager test: 360493
</form>
<!-- TODO: action=IP.ADDRESS instead of HOSTNAME? -->
<!-- TODO: test with |base href="http://othersite//"| ? -->
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
-/** Test for Password Manger: 360493 (Cross-Site Forms + Password Manager = Security Failure) **/
+/** Test for Login Manager: 360493 (Cross-Site Forms + Password Manager = Security Failure) **/
// This test is designed to make sure variations on the form's |action| and |method|
// continue to work with the fix for 360493.
function startTest() {
for (var i = 1; i <= 9; i++) {
// Check form i
is($_("uname" + i).value, "testuser" + i, "Checking for filled username " + i);
--- a/toolkit/components/passwordmgr/test/test_bug_360493_2.html
+++ b/toolkit/components/passwordmgr/test/test_bug_360493_2.html
@@ -1,19 +1,19 @@
<!DOCTYPE HTML>
<html>
<head>
- <title>Test for Password Manager</title>
+ <title>Test for Login Manager</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
-Password Manager test: 360493
+Login Manager test: 360493
<p id="display"></p>
<div id="content" style="display: none">
<!-- The tests in this page exercise things that shouldn't work. -->
<!-- Change port # of action URL from 8888 to 7777 -->
<form action="http://localhost:7777/tests/toolkit/components/passwordmgr/test/formtest.js" method="get">
<input type="text" name="uname1" value="">
@@ -124,17 +124,17 @@ Password Manager test: 360493
<!-- TODO: probably should have some accounts which have no port # in the action url. JS too. And different host/proto. -->
<!-- TODO: www.site.com vs. site.com? -->
<!-- TODO: foo.site.com vs. bar.site.com? -->
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
-/** Test for Password Manger: 360493 (Cross-Site Forms + Password Manager = Security Failure) **/
+/** Test for Login Manager: 360493 (Cross-Site Forms + Password Manager = Security Failure) **/
function startTest() {
for (var i = 1; i <= 8; i++) {
// Check form i
is($_("uname" + i).value, "", "Checking for unfilled username " + i);
is($_("pword" + i).value, "", "Checking for unfilled password " + i);
}
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/reference-empty.txt
@@ -0,0 +1,1 @@
+#2c
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/reference-output-00.txt
@@ -0,0 +1,3 @@
+#2d
+http://www.nsa.gov
+.
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/reference-output-01a.txt
@@ -0,0 +1,3 @@
+#2d
+http://www.nsa.gov
+.
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/reference-output-01b.txt
@@ -0,0 +1,2 @@
+#2d
+.
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/reference-output-02.txt
@@ -0,0 +1,9 @@
+#2d
+.
+http://dummyhost.mozilla.org
+put_user_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECIfQXnNdOlcABBCrqWo0hzkpOPmpGiybiVkU
+*put_pw_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECO2TxG6B5o66BBA1PUI/iSkl1G020imhKgEa
+
+.
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/reference-output-03.txt
@@ -0,0 +1,16 @@
+#2d
+.
+http://dummyhost.mozilla.org
+put_user_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECCcwyTNPm0qJBBD10w5WFcQ7eMIMGSTujH3k
+*put_pw_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECOqroi20oiqbBBC2UnpoZC9M/pkem9Csfzeg
+
+.
+http://dummyhost2.mozilla.org
+put_user2_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECKRdcGvGFLweBBBPN2MNaaw6NUUkkj0CebX+
+*put_pw2_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECPFh9cwe24C1BBA3dcR+4B6G5kmb/oE+9zFT
+http://cgi.site.com
+.
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/reference-output-04.txt
@@ -0,0 +1,14 @@
+#2d
+.
+http://dummyhost2.mozilla.org
+put_user2_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECI/wcg7naww1BBD/ookfBmtc2MX0g8Xyr51f
+*put_pw2_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECAoufABHZExXBBDEjlmK9AmpFcp8ODsdgofN
+http://cgi.site.com
+put_user3_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECK+7oqm6qJyjBBCu0Nxgl+ebE25bMcl4/RnT
+*put_pw3_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECA//vIyOIl4oBBALsaRqgn86jFYdZioff78I
+http://cgi.site.com
+.
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/reference-output-05.txt
@@ -0,0 +1,21 @@
+#2d
+.
+http://dummyhost2.mozilla.org
+put_user3_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECKfHgxwiNXmTBBDcGLjIy+oENYOm1q221TOt
+*put_pw3_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECA+Z8io0HuoEBBAeIuKN+GhWoUBTe2BXMXFi
+http://cgi.site.com
+put_user2_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHyVmW8pKofcBBBpItqB2fSkoRy5QpsDqRLC
+*put_pw2_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECOeOPkiPdHytBBCiyHzAsUTV5lJsf5DODskj
+http://cgi.site.com
+.
+http://dummyhost.mozilla.org
+put_user_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECH8TQwm4TZZvBBA5QKgtqCn/M56QolF8ul4i
+*put_pw_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECO9sv4sGVI+aBBDFwhQekg9Gzw1dpx41zp6D
+
+.
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/signons-01.txt
@@ -0,0 +1,2 @@
+thisHeaderIsInvalid
+
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/signons-02.txt
@@ -0,0 +1,1 @@
+#2c
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/signons-03.txt
@@ -0,0 +1,3 @@
+#2c
+http://www.disabled.com
+.
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/signons-04.txt
@@ -0,0 +1,4 @@
+#2c
+http://www.disabled.com
+.
+.
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/signons-05.txt
@@ -0,0 +1,8 @@
+#2c
+.
+http://dummyhost.mozilla.org
+put_user_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*put_pw_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+.
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/signons-06.txt
@@ -0,0 +1,9 @@
+#2c
+https://www.site.net
+.
+http://dummyhost.mozilla.org
+put_user_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*put_pw_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+.
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/signons-07.txt
@@ -0,0 +1,12 @@
+#2c
+.
+http://dummyhost.mozilla.org
+put_user_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*put_pw_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+put_user2_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECN3Gv1qOhoVxBBCgfjGGL+0PJ9iqP/uAHp2c
+*put_pw2_here
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECMOQnjGpKF9jBBAoXZIkQ9BSElkS5s6L51qX
+.
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/unit/data/signons-08.txt
@@ -0,0 +1,7004 @@
+#2d
+http://host-1.site.com
+http://host-2.site.com
+http://host-3.site.com
+http://host-4.site.com
+http://host-5.site.com
+http://host-6.site.com
+http://host-7.site.com
+http://host-8.site.com
+http://host-9.site.com
+http://host-10.site.com
+http://host-11.site.com
+http://host-12.site.com
+http://host-13.site.com
+http://host-14.site.com
+http://host-15.site.com
+http://host-16.site.com
+http://host-17.site.com
+http://host-18.site.com
+http://host-19.site.com
+http://host-20.site.com
+http://host-21.site.com
+http://host-22.site.com
+http://host-23.site.com
+http://host-24.site.com
+http://host-25.site.com
+http://host-26.site.com
+http://host-27.site.com
+http://host-28.site.com
+http://host-29.site.com
+http://host-30.site.com
+http://host-31.site.com
+http://host-32.site.com
+http://host-33.site.com
+http://host-34.site.com
+http://host-35.site.com
+http://host-36.site.com
+http://host-37.site.com
+http://host-38.site.com
+http://host-39.site.com
+http://host-40.site.com
+http://host-41.site.com
+http://host-42.site.com
+http://host-43.site.com
+http://host-44.site.com
+http://host-45.site.com
+http://host-46.site.com
+http://host-47.site.com
+http://host-48.site.com
+http://host-49.site.com
+http://host-50.site.com
+http://host-51.site.com
+http://host-52.site.com
+http://host-53.site.com
+http://host-54.site.com
+http://host-55.site.com
+http://host-56.site.com
+http://host-57.site.com
+http://host-58.site.com
+http://host-59.site.com
+http://host-60.site.com
+http://host-61.site.com
+http://host-62.site.com
+http://host-63.site.com
+http://host-64.site.com
+http://host-65.site.com
+http://host-66.site.com
+http://host-67.site.com
+http://host-68.site.com
+http://host-69.site.com
+http://host-70.site.com
+http://host-71.site.com
+http://host-72.site.com
+http://host-73.site.com
+http://host-74.site.com
+http://host-75.site.com
+http://host-76.site.com
+http://host-77.site.com
+http://host-78.site.com
+http://host-79.site.com
+http://host-80.site.com
+http://host-81.site.com
+http://host-82.site.com
+http://host-83.site.com
+http://host-84.site.com
+http://host-85.site.com
+http://host-86.site.com
+http://host-87.site.com
+http://host-88.site.com
+http://host-89.site.com
+http://host-90.site.com
+http://host-91.site.com
+http://host-92.site.com
+http://host-93.site.com
+http://host-94.site.com
+http://host-95.site.com
+http://host-96.site.com
+http://host-97.site.com
+http://host-98.site.com
+http://host-99.site.com
+http://host-100.site.com
+http://host-101.site.com
+http://host-102.site.com
+http://host-103.site.com
+http://host-104.site.com
+http://host-105.site.com
+http://host-106.site.com
+http://host-107.site.com
+http://host-108.site.com
+http://host-109.site.com
+http://host-110.site.com
+http://host-111.site.com
+http://host-112.site.com
+http://host-113.site.com
+http://host-114.site.com
+http://host-115.site.com
+http://host-116.site.com
+http://host-117.site.com
+http://host-118.site.com
+http://host-119.site.com
+http://host-120.site.com
+http://host-121.site.com
+http://host-122.site.com
+http://host-123.site.com
+http://host-124.site.com
+http://host-125.site.com
+http://host-126.site.com
+http://host-127.site.com
+http://host-128.site.com
+http://host-129.site.com
+http://host-130.site.com
+http://host-131.site.com
+http://host-132.site.com
+http://host-133.site.com
+http://host-134.site.com
+http://host-135.site.com
+http://host-136.site.com
+http://host-137.site.com
+http://host-138.site.com
+http://host-139.site.com
+http://host-140.site.com
+http://host-141.site.com
+http://host-142.site.com
+http://host-143.site.com
+http://host-144.site.com
+http://host-145.site.com
+http://host-146.site.com
+http://host-147.site.com
+http://host-148.site.com
+http://host-149.site.com
+http://host-150.site.com
+http://host-151.site.com
+http://host-152.site.com
+http://host-153.site.com
+http://host-154.site.com
+http://host-155.site.com
+http://host-156.site.com
+http://host-157.site.com
+http://host-158.site.com
+http://host-159.site.com
+http://host-160.site.com
+http://host-161.site.com
+http://host-162.site.com
+http://host-163.site.com
+http://host-164.site.com
+http://host-165.site.com
+http://host-166.site.com
+http://host-167.site.com
+http://host-168.site.com
+http://host-169.site.com
+http://host-170.site.com
+http://host-171.site.com
+http://host-172.site.com
+http://host-173.site.com
+http://host-174.site.com
+http://host-175.site.com
+http://host-176.site.com
+http://host-177.site.com
+http://host-178.site.com
+http://host-179.site.com
+http://host-180.site.com
+http://host-181.site.com
+http://host-182.site.com
+http://host-183.site.com
+http://host-184.site.com
+http://host-185.site.com
+http://host-186.site.com
+http://host-187.site.com
+http://host-188.site.com
+http://host-189.site.com
+http://host-190.site.com
+http://host-191.site.com
+http://host-192.site.com
+http://host-193.site.com
+http://host-194.site.com
+http://host-195.site.com
+http://host-196.site.com
+http://host-197.site.com
+http://host-198.site.com
+http://host-199.site.com
+http://host-200.site.com
+http://host-201.site.com
+http://host-202.site.com
+http://host-203.site.com
+http://host-204.site.com
+http://host-205.site.com
+http://host-206.site.com
+http://host-207.site.com
+http://host-208.site.com
+http://host-209.site.com
+http://host-210.site.com
+http://host-211.site.com
+http://host-212.site.com
+http://host-213.site.com
+http://host-214.site.com
+http://host-215.site.com
+http://host-216.site.com
+http://host-217.site.com
+http://host-218.site.com
+http://host-219.site.com
+http://host-220.site.com
+http://host-221.site.com
+http://host-222.site.com
+http://host-223.site.com
+http://host-224.site.com
+http://host-225.site.com
+http://host-226.site.com
+http://host-227.site.com
+http://host-228.site.com
+http://host-229.site.com
+http://host-230.site.com
+http://host-231.site.com
+http://host-232.site.com
+http://host-233.site.com
+http://host-234.site.com
+http://host-235.site.com
+http://host-236.site.com
+http://host-237.site.com
+http://host-238.site.com
+http://host-239.site.com
+http://host-240.site.com
+http://host-241.site.com
+http://host-242.site.com
+http://host-243.site.com
+http://host-244.site.com
+http://host-245.site.com
+http://host-246.site.com
+http://host-247.site.com
+http://host-248.site.com
+http://host-249.site.com
+http://host-250.site.com
+http://host-251.site.com
+http://host-252.site.com
+http://host-253.site.com
+http://host-254.site.com
+http://host-255.site.com
+http://host-256.site.com
+http://host-257.site.com
+http://host-258.site.com
+http://host-259.site.com
+http://host-260.site.com
+http://host-261.site.com
+http://host-262.site.com
+http://host-263.site.com
+http://host-264.site.com
+http://host-265.site.com
+http://host-266.site.com
+http://host-267.site.com
+http://host-268.site.com
+http://host-269.site.com
+http://host-270.site.com
+http://host-271.site.com
+http://host-272.site.com
+http://host-273.site.com
+http://host-274.site.com
+http://host-275.site.com
+http://host-276.site.com
+http://host-277.site.com
+http://host-278.site.com
+http://host-279.site.com
+http://host-280.site.com
+http://host-281.site.com
+http://host-282.site.com
+http://host-283.site.com
+http://host-284.site.com
+http://host-285.site.com
+http://host-286.site.com
+http://host-287.site.com
+http://host-288.site.com
+http://host-289.site.com
+http://host-290.site.com
+http://host-291.site.com
+http://host-292.site.com
+http://host-293.site.com
+http://host-294.site.com
+http://host-295.site.com
+http://host-296.site.com
+http://host-297.site.com
+http://host-298.site.com
+http://host-299.site.com
+http://host-300.site.com
+http://host-301.site.com
+http://host-302.site.com
+http://host-303.site.com
+http://host-304.site.com
+http://host-305.site.com
+http://host-306.site.com
+http://host-307.site.com
+http://host-308.site.com
+http://host-309.site.com
+http://host-310.site.com
+http://host-311.site.com
+http://host-312.site.com
+http://host-313.site.com
+http://host-314.site.com
+http://host-315.site.com
+http://host-316.site.com
+http://host-317.site.com
+http://host-318.site.com
+http://host-319.site.com
+http://host-320.site.com
+http://host-321.site.com
+http://host-322.site.com
+http://host-323.site.com
+http://host-324.site.com
+http://host-325.site.com
+http://host-326.site.com
+http://host-327.site.com
+http://host-328.site.com
+http://host-329.site.com
+http://host-330.site.com
+http://host-331.site.com
+http://host-332.site.com
+http://host-333.site.com
+http://host-334.site.com
+http://host-335.site.com
+http://host-336.site.com
+http://host-337.site.com
+http://host-338.site.com
+http://host-339.site.com
+http://host-340.site.com
+http://host-341.site.com
+http://host-342.site.com
+http://host-343.site.com
+http://host-344.site.com
+http://host-345.site.com
+http://host-346.site.com
+http://host-347.site.com
+http://host-348.site.com
+http://host-349.site.com
+http://host-350.site.com
+http://host-351.site.com
+http://host-352.site.com
+http://host-353.site.com
+http://host-354.site.com
+http://host-355.site.com
+http://host-356.site.com
+http://host-357.site.com
+http://host-358.site.com
+http://host-359.site.com
+http://host-360.site.com
+http://host-361.site.com
+http://host-362.site.com
+http://host-363.site.com
+http://host-364.site.com
+http://host-365.site.com
+http://host-366.site.com
+http://host-367.site.com
+http://host-368.site.com
+http://host-369.site.com
+http://host-370.site.com
+http://host-371.site.com
+http://host-372.site.com
+http://host-373.site.com
+http://host-374.site.com
+http://host-375.site.com
+http://host-376.site.com
+http://host-377.site.com
+http://host-378.site.com
+http://host-379.site.com
+http://host-380.site.com
+http://host-381.site.com
+http://host-382.site.com
+http://host-383.site.com
+http://host-384.site.com
+http://host-385.site.com
+http://host-386.site.com
+http://host-387.site.com
+http://host-388.site.com
+http://host-389.site.com
+http://host-390.site.com
+http://host-391.site.com
+http://host-392.site.com
+http://host-393.site.com
+http://host-394.site.com
+http://host-395.site.com
+http://host-396.site.com
+http://host-397.site.com
+http://host-398.site.com
+http://host-399.site.com
+http://host-400.site.com
+http://host-401.site.com
+http://host-402.site.com
+http://host-403.site.com
+http://host-404.site.com
+http://host-405.site.com
+http://host-406.site.com
+http://host-407.site.com
+http://host-408.site.com
+http://host-409.site.com
+http://host-410.site.com
+http://host-411.site.com
+http://host-412.site.com
+http://host-413.site.com
+http://host-414.site.com
+http://host-415.site.com
+http://host-416.site.com
+http://host-417.site.com
+http://host-418.site.com
+http://host-419.site.com
+http://host-420.site.com
+http://host-421.site.com
+http://host-422.site.com
+http://host-423.site.com
+http://host-424.site.com
+http://host-425.site.com
+http://host-426.site.com
+http://host-427.site.com
+http://host-428.site.com
+http://host-429.site.com
+http://host-430.site.com
+http://host-431.site.com
+http://host-432.site.com
+http://host-433.site.com
+http://host-434.site.com
+http://host-435.site.com
+http://host-436.site.com
+http://host-437.site.com
+http://host-438.site.com
+http://host-439.site.com
+http://host-440.site.com
+http://host-441.site.com
+http://host-442.site.com
+http://host-443.site.com
+http://host-444.site.com
+http://host-445.site.com
+http://host-446.site.com
+http://host-447.site.com
+http://host-448.site.com
+http://host-449.site.com
+http://host-450.site.com
+http://host-451.site.com
+http://host-452.site.com
+http://host-453.site.com
+http://host-454.site.com
+http://host-455.site.com
+http://host-456.site.com
+http://host-457.site.com
+http://host-458.site.com
+http://host-459.site.com
+http://host-460.site.com
+http://host-461.site.com
+http://host-462.site.com
+http://host-463.site.com
+http://host-464.site.com
+http://host-465.site.com
+http://host-466.site.com
+http://host-467.site.com
+http://host-468.site.com
+http://host-469.site.com
+http://host-470.site.com
+http://host-471.site.com
+http://host-472.site.com
+http://host-473.site.com
+http://host-474.site.com
+http://host-475.site.com
+http://host-476.site.com
+http://host-477.site.com
+http://host-478.site.com
+http://host-479.site.com
+http://host-480.site.com
+http://host-481.site.com
+http://host-482.site.com
+http://host-483.site.com
+http://host-484.site.com
+http://host-485.site.com
+http://host-486.site.com
+http://host-487.site.com
+http://host-488.site.com
+http://host-489.site.com
+http://host-490.site.com
+http://host-491.site.com
+http://host-492.site.com
+http://host-493.site.com
+http://host-494.site.com
+http://host-495.site.com
+http://host-496.site.com
+http://host-497.site.com
+http://host-498.site.com
+http://host-499.site.com
+http://host-500.site.com
+http://host-501.site.com
+http://host-502.site.com
+http://host-503.site.com
+http://host-504.site.com
+http://host-505.site.com
+http://host-506.site.com
+http://host-507.site.com
+http://host-508.site.com
+http://host-509.site.com
+http://host-510.site.com
+http://host-511.site.com
+http://host-512.site.com
+http://host-513.site.com
+http://host-514.site.com
+http://host-515.site.com
+http://host-516.site.com
+http://host-517.site.com
+http://host-518.site.com
+http://host-519.site.com
+http://host-520.site.com
+http://host-521.site.com
+http://host-522.site.com
+http://host-523.site.com
+http://host-524.site.com
+http://host-525.site.com
+http://host-526.site.com
+http://host-527.site.com
+http://host-528.site.com
+http://host-529.site.com
+http://host-530.site.com
+http://host-531.site.com
+http://host-532.site.com
+http://host-533.site.com
+http://host-534.site.com
+http://host-535.site.com
+http://host-536.site.com
+http://host-537.site.com
+http://host-538.site.com
+http://host-539.site.com
+http://host-540.site.com
+http://host-541.site.com
+http://host-542.site.com
+http://host-543.site.com
+http://host-544.site.com
+http://host-545.site.com
+http://host-546.site.com
+http://host-547.site.com
+http://host-548.site.com
+http://host-549.site.com
+http://host-550.site.com
+http://host-551.site.com
+http://host-552.site.com
+http://host-553.site.com
+http://host-554.site.com
+http://host-555.site.com
+http://host-556.site.com
+http://host-557.site.com
+http://host-558.site.com
+http://host-559.site.com
+http://host-560.site.com
+http://host-561.site.com
+http://host-562.site.com
+http://host-563.site.com
+http://host-564.site.com
+http://host-565.site.com
+http://host-566.site.com
+http://host-567.site.com
+http://host-568.site.com
+http://host-569.site.com
+http://host-570.site.com
+http://host-571.site.com
+http://host-572.site.com
+http://host-573.site.com
+http://host-574.site.com
+http://host-575.site.com
+http://host-576.site.com
+http://host-577.site.com
+http://host-578.site.com
+http://host-579.site.com
+http://host-580.site.com
+http://host-581.site.com
+http://host-582.site.com
+http://host-583.site.com
+http://host-584.site.com
+http://host-585.site.com
+http://host-586.site.com
+http://host-587.site.com
+http://host-588.site.com
+http://host-589.site.com
+http://host-590.site.com
+http://host-591.site.com
+http://host-592.site.com
+http://host-593.site.com
+http://host-594.site.com
+http://host-595.site.com
+http://host-596.site.com
+http://host-597.site.com
+http://host-598.site.com
+http://host-599.site.com
+http://host-600.site.com
+http://host-601.site.com
+http://host-602.site.com
+http://host-603.site.com
+http://host-604.site.com
+http://host-605.site.com
+http://host-606.site.com
+http://host-607.site.com
+http://host-608.site.com
+http://host-609.site.com
+http://host-610.site.com
+http://host-611.site.com
+http://host-612.site.com
+http://host-613.site.com
+http://host-614.site.com
+http://host-615.site.com
+http://host-616.site.com
+http://host-617.site.com
+http://host-618.site.com
+http://host-619.site.com
+http://host-620.site.com
+http://host-621.site.com
+http://host-622.site.com
+http://host-623.site.com
+http://host-624.site.com
+http://host-625.site.com
+http://host-626.site.com
+http://host-627.site.com
+http://host-628.site.com
+http://host-629.site.com
+http://host-630.site.com
+http://host-631.site.com
+http://host-632.site.com
+http://host-633.site.com
+http://host-634.site.com
+http://host-635.site.com
+http://host-636.site.com
+http://host-637.site.com
+http://host-638.site.com
+http://host-639.site.com
+http://host-640.site.com
+http://host-641.site.com
+http://host-642.site.com
+http://host-643.site.com
+http://host-644.site.com
+http://host-645.site.com
+http://host-646.site.com
+http://host-647.site.com
+http://host-648.site.com
+http://host-649.site.com
+http://host-650.site.com
+http://host-651.site.com
+http://host-652.site.com
+http://host-653.site.com
+http://host-654.site.com
+http://host-655.site.com
+http://host-656.site.com
+http://host-657.site.com
+http://host-658.site.com
+http://host-659.site.com
+http://host-660.site.com
+http://host-661.site.com
+http://host-662.site.com
+http://host-663.site.com
+http://host-664.site.com
+http://host-665.site.com
+http://host-666.site.com
+http://host-667.site.com
+http://host-668.site.com
+http://host-669.site.com
+http://host-670.site.com
+http://host-671.site.com
+http://host-672.site.com
+http://host-673.site.com
+http://host-674.site.com
+http://host-675.site.com
+http://host-676.site.com
+http://host-677.site.com
+http://host-678.site.com
+http://host-679.site.com
+http://host-680.site.com
+http://host-681.site.com
+http://host-682.site.com
+http://host-683.site.com
+http://host-684.site.com
+http://host-685.site.com
+http://host-686.site.com
+http://host-687.site.com
+http://host-688.site.com
+http://host-689.site.com
+http://host-690.site.com
+http://host-691.site.com
+http://host-692.site.com
+http://host-693.site.com
+http://host-694.site.com
+http://host-695.site.com
+http://host-696.site.com
+http://host-697.site.com
+http://host-698.site.com
+http://host-699.site.com
+http://host-700.site.com
+http://host-701.site.com
+http://host-702.site.com
+http://host-703.site.com
+http://host-704.site.com
+http://host-705.site.com
+http://host-706.site.com
+http://host-707.site.com
+http://host-708.site.com
+http://host-709.site.com
+http://host-710.site.com
+http://host-711.site.com
+http://host-712.site.com
+http://host-713.site.com
+http://host-714.site.com
+http://host-715.site.com
+http://host-716.site.com
+http://host-717.site.com
+http://host-718.site.com
+http://host-719.site.com
+http://host-720.site.com
+http://host-721.site.com
+http://host-722.site.com
+http://host-723.site.com
+http://host-724.site.com
+http://host-725.site.com
+http://host-726.site.com
+http://host-727.site.com
+http://host-728.site.com
+http://host-729.site.com
+http://host-730.site.com
+http://host-731.site.com
+http://host-732.site.com
+http://host-733.site.com
+http://host-734.site.com
+http://host-735.site.com
+http://host-736.site.com
+http://host-737.site.com
+http://host-738.site.com
+http://host-739.site.com
+http://host-740.site.com
+http://host-741.site.com
+http://host-742.site.com
+http://host-743.site.com
+http://host-744.site.com
+http://host-745.site.com
+http://host-746.site.com
+http://host-747.site.com
+http://host-748.site.com
+http://host-749.site.com
+http://host-750.site.com
+http://host-751.site.com
+http://host-752.site.com
+http://host-753.site.com
+http://host-754.site.com
+http://host-755.site.com
+http://host-756.site.com
+http://host-757.site.com
+http://host-758.site.com
+http://host-759.site.com
+http://host-760.site.com
+http://host-761.site.com
+http://host-762.site.com
+http://host-763.site.com
+http://host-764.site.com
+http://host-765.site.com
+http://host-766.site.com
+http://host-767.site.com
+http://host-768.site.com
+http://host-769.site.com
+http://host-770.site.com
+http://host-771.site.com
+http://host-772.site.com
+http://host-773.site.com
+http://host-774.site.com
+http://host-775.site.com
+http://host-776.site.com
+http://host-777.site.com
+http://host-778.site.com
+http://host-779.site.com
+http://host-780.site.com
+http://host-781.site.com
+http://host-782.site.com
+http://host-783.site.com
+http://host-784.site.com
+http://host-785.site.com
+http://host-786.site.com
+http://host-787.site.com
+http://host-788.site.com
+http://host-789.site.com
+http://host-790.site.com
+http://host-791.site.com
+http://host-792.site.com
+http://host-793.site.com
+http://host-794.site.com
+http://host-795.site.com
+http://host-796.site.com
+http://host-797.site.com
+http://host-798.site.com
+http://host-799.site.com
+http://host-800.site.com
+http://host-801.site.com
+http://host-802.site.com
+http://host-803.site.com
+http://host-804.site.com
+http://host-805.site.com
+http://host-806.site.com
+http://host-807.site.com
+http://host-808.site.com
+http://host-809.site.com
+http://host-810.site.com
+http://host-811.site.com
+http://host-812.site.com
+http://host-813.site.com
+http://host-814.site.com
+http://host-815.site.com
+http://host-816.site.com
+http://host-817.site.com
+http://host-818.site.com
+http://host-819.site.com
+http://host-820.site.com
+http://host-821.site.com
+http://host-822.site.com
+http://host-823.site.com
+http://host-824.site.com
+http://host-825.site.com
+http://host-826.site.com
+http://host-827.site.com
+http://host-828.site.com
+http://host-829.site.com
+http://host-830.site.com
+http://host-831.site.com
+http://host-832.site.com
+http://host-833.site.com
+http://host-834.site.com
+http://host-835.site.com
+http://host-836.site.com
+http://host-837.site.com
+http://host-838.site.com
+http://host-839.site.com
+http://host-840.site.com
+http://host-841.site.com
+http://host-842.site.com
+http://host-843.site.com
+http://host-844.site.com
+http://host-845.site.com
+http://host-846.site.com
+http://host-847.site.com
+http://host-848.site.com
+http://host-849.site.com
+http://host-850.site.com
+http://host-851.site.com
+http://host-852.site.com
+http://host-853.site.com
+http://host-854.site.com
+http://host-855.site.com
+http://host-856.site.com
+http://host-857.site.com
+http://host-858.site.com
+http://host-859.site.com
+http://host-860.site.com
+http://host-861.site.com
+http://host-862.site.com
+http://host-863.site.com
+http://host-864.site.com
+http://host-865.site.com
+http://host-866.site.com
+http://host-867.site.com
+http://host-868.site.com
+http://host-869.site.com
+http://host-870.site.com
+http://host-871.site.com
+http://host-872.site.com
+http://host-873.site.com
+http://host-874.site.com
+http://host-875.site.com
+http://host-876.site.com
+http://host-877.site.com
+http://host-878.site.com
+http://host-879.site.com
+http://host-880.site.com
+http://host-881.site.com
+http://host-882.site.com
+http://host-883.site.com
+http://host-884.site.com
+http://host-885.site.com
+http://host-886.site.com
+http://host-887.site.com
+http://host-888.site.com
+http://host-889.site.com
+http://host-890.site.com
+http://host-891.site.com
+http://host-892.site.com
+http://host-893.site.com
+http://host-894.site.com
+http://host-895.site.com
+http://host-896.site.com
+http://host-897.site.com
+http://host-898.site.com
+http://host-899.site.com
+http://host-900.site.com
+http://host-901.site.com
+http://host-902.site.com
+http://host-903.site.com
+http://host-904.site.com
+http://host-905.site.com
+http://host-906.site.com
+http://host-907.site.com
+http://host-908.site.com
+http://host-909.site.com
+http://host-910.site.com
+http://host-911.site.com
+http://host-912.site.com
+http://host-913.site.com
+http://host-914.site.com
+http://host-915.site.com
+http://host-916.site.com
+http://host-917.site.com
+http://host-918.site.com
+http://host-919.site.com
+http://host-920.site.com
+http://host-921.site.com
+http://host-922.site.com
+http://host-923.site.com
+http://host-924.site.com
+http://host-925.site.com
+http://host-926.site.com
+http://host-927.site.com
+http://host-928.site.com
+http://host-929.site.com
+http://host-930.site.com
+http://host-931.site.com
+http://host-932.site.com
+http://host-933.site.com
+http://host-934.site.com
+http://host-935.site.com
+http://host-936.site.com
+http://host-937.site.com
+http://host-938.site.com
+http://host-939.site.com
+http://host-940.site.com
+http://host-941.site.com
+http://host-942.site.com
+http://host-943.site.com
+http://host-944.site.com
+http://host-945.site.com
+http://host-946.site.com
+http://host-947.site.com
+http://host-948.site.com
+http://host-949.site.com
+http://host-950.site.com
+http://host-951.site.com
+http://host-952.site.com
+http://host-953.site.com
+http://host-954.site.com
+http://host-955.site.com
+http://host-956.site.com
+http://host-957.site.com
+http://host-958.site.com
+http://host-959.site.com
+http://host-960.site.com
+http://host-961.site.com
+http://host-962.site.com
+http://host-963.site.com
+http://host-964.site.com
+http://host-965.site.com
+http://host-966.site.com
+http://host-967.site.com
+http://host-968.site.com
+http://host-969.site.com
+http://host-970.site.com
+http://host-971.site.com
+http://host-972.site.com
+http://host-973.site.com
+http://host-974.site.com
+http://host-975.site.com
+http://host-976.site.com
+http://host-977.site.com
+http://host-978.site.com
+http://host-979.site.com
+http://host-980.site.com
+http://host-981.site.com
+http://host-982.site.com
+http://host-983.site.com
+http://host-984.site.com
+http://host-985.site.com
+http://host-986.site.com
+http://host-987.site.com
+http://host-988.site.com
+http://host-989.site.com
+http://host-990.site.com
+http://host-991.site.com
+http://host-992.site.com
+http://host-993.site.com
+http://host-994.site.com
+http://host-995.site.com
+http://host-996.site.com
+http://host-997.site.com
+http://host-998.site.com
+http://host-999.site.com
+http://host-1000.site.com
+.
+http://dummyhost.site.org
+usernameField-1
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-1
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-2
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-2
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-3
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-3
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-4
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-4
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-5
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-5
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-6
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-6
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-7
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-7
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-8
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-8
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-9
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-9
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-10
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-10
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-11
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-11
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-12
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-12
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-13
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-13
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-14
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-14
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-15
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-15
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-16
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-16
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-17
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-17
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-18
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-18
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-19
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-19
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-20
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-20
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-21
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-21
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-22
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-22
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-23
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-23
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-24
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-24
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-25
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-25
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-26
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-26
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-27
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-27
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-28
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-28
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-29
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-29
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-30
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-30
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-31
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-31
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-32
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-32
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-33
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-33
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-34
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-34
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-35
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-35
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-36
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-36
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-37
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-37
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-38
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-38
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-39
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-39
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-40
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-40
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-41
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-41
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-42
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-42
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-43
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-43
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-44
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-44
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-45
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-45
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-46
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-46
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-47
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-47
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-48
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-48
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-49
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-49
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-50
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-50
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-51
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-51
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-52
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-52
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-53
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-53
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-54
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-54
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-55
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-55
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-56
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-56
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-57
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-57
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-58
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-58
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-59
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-59
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-60
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-60
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-61
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-61
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-62
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-62
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-63
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-63
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-64
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-64
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-65
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-65
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-66
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-66
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-67
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-67
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-68
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-68
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-69
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-69
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-70
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-70
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-71
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-71
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-72
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-72
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-73
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-73
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-74
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-74
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-75
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-75
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-76
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-76
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-77
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-77
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-78
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-78
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-79
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-79
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-80
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-80
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-81
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-81
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-82
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-82
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-83
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-83
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-84
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-84
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-85
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-85
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-86
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-86
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-87
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-87
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-88
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-88
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-89
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-89
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-90
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-90
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-91
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-91
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-92
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-92
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-93
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-93
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-94
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-94
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-95
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-95
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-96
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-96
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-97
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-97
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-98
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-98
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-99
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-99
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-100
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-100
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-101
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-101
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-102
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-102
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-103
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-103
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-104
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-104
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-105
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-105
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-106
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-106
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-107
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-107
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-108
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-108
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-109
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-109
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-110
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-110
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-111
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-111
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-112
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-112
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-113
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-113
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-114
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-114
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-115
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-115
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-116
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-116
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-117
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-117
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-118
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-118
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-119
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-119
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-120
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-120
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-121
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-121
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-122
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-122
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-123
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-123
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-124
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-124
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-125
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-125
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-126
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-126
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-127
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-127
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-128
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-128
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-129
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-129
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-130
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-130
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-131
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-131
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-132
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-132
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-133
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-133
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-134
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-134
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-135
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-135
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-136
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-136
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-137
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-137
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-138
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-138
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-139
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-139
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-140
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-140
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-141
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-141
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-142
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-142
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-143
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-143
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-144
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-144
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-145
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-145
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-146
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-146
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-147
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-147
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-148
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-148
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-149
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-149
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-150
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-150
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-151
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-151
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-152
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-152
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-153
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-153
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-154
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-154
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-155
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-155
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-156
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-156
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-157
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-157
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-158
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-158
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-159
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-159
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-160
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-160
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-161
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-161
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-162
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-162
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-163
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-163
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-164
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-164
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-165
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-165
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-166
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-166
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-167
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-167
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-168
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-168
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-169
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-169
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-170
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-170
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-171
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-171
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-172
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-172
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-173
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-173
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-174
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-174
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-175
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-175
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-176
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-176
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-177
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-177
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-178
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-178
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-179
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-179
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-180
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-180
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-181
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-181
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-182
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-182
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-183
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-183
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-184
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-184
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-185
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-185
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-186
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-186
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-187
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-187
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-188
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-188
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-189
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-189
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-190
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-190
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-191
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-191
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-192
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-192
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-193
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-193
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-194
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-194
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-195
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-195
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-196
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-196
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-197
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-197
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-198
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-198
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-199
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-199
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-200
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-200
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-201
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-201
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-202
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-202
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-203
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-203
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-204
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-204
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-205
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-205
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-206
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-206
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-207
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-207
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-208
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-208
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-209
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-209
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-210
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-210
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-211
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-211
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-212
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-212
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-213
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-213
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-214
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-214
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-215
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-215
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-216
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-216
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-217
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-217
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-218
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-218
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-219
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-219
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-220
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-220
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-221
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-221
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-222
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-222
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-223
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-223
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-224
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-224
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-225
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-225
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-226
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-226
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-227
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-227
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-228
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-228
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-229
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-229
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-230
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-230
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-231
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-231
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-232
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-232
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-233
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-233
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-234
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-234
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-235
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-235
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-236
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-236
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-237
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-237
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-238
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-238
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-239
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-239
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-240
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-240
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-241
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-241
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-242
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-242
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-243
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-243
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-244
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-244
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-245
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-245
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-246
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-246
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-247
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-247
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-248
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-248
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-249
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-249
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-250
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-250
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-251
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-251
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-252
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-252
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-253
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-253
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-254
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-254
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-255
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-255
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-256
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-256
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-257
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-257
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-258
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-258
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-259
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-259
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-260
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-260
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-261
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-261
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-262
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-262
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-263
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-263
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-264
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-264
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-265
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-265
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-266
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-266
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-267
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-267
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-268
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-268
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-269
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-269
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-270
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-270
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-271
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-271
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-272
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-272
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-273
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-273
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-274
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-274
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-275
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-275
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-276
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-276
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-277
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-277
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-278
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-278
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-279
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-279
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-280
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-280
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-281
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-281
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-282
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-282
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-283
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-283
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-284
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-284
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-285
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-285
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-286
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-286
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-287
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-287
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-288
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-288
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-289
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-289
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-290
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-290
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-291
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-291
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-292
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-292
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-293
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-293
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-294
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-294
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-295
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-295
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-296
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-296
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-297
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-297
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-298
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-298
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-299
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-299
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-300
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-300
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-301
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-301
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-302
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-302
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-303
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-303
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-304
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-304
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-305
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-305
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-306
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-306
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-307
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-307
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-308
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-308
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-309
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-309
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-310
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-310
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-311
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-311
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-312
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-312
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-313
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-313
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-314
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-314
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-315
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-315
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-316
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-316
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-317
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-317
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-318
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-318
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-319
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-319
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-320
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-320
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-321
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-321
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-322
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-322
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-323
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-323
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-324
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-324
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-325
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-325
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-326
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-326
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-327
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-327
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-328
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-328
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-329
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-329
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-330
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-330
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-331
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-331
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-332
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-332
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-333
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-333
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-334
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-334
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-335
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-335
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-336
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-336
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-337
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-337
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-338
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-338
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-339
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-339
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-340
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-340
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-341
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-341
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-342
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-342
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-343
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-343
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-344
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-344
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-345
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-345
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-346
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-346
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-347
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-347
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-348
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-348
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-349
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-349
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-350
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-350
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-351
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-351
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-352
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-352
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-353
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-353
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-354
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-354
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-355
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-355
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-356
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-356
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-357
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-357
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-358
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-358
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-359
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-359
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-360
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-360
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-361
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-361
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-362
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-362
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-363
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-363
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-364
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-364
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-365
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-365
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-366
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-366
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-367
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-367
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-368
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-368
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-369
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-369
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-370
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-370
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-371
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-371
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-372
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-372
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-373
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-373
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-374
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-374
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-375
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-375
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-376
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-376
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-377
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-377
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-378
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-378
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-379
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-379
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-380
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-380
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-381
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-381
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-382
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-382
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-383
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-383
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-384
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-384
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-385
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-385
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-386
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-386
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-387
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-387
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-388
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-388
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-389
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-389
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-390
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-390
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-391
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-391
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-392
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-392
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-393
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-393
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-394
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-394
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-395
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-395
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-396
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-396
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-397
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-397
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-398
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-398
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-399
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-399
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-400
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-400
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-401
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-401
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-402
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-402
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-403
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-403
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-404
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-404
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-405
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-405
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-406
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-406
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-407
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-407
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-408
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-408
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-409
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-409
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-410
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-410
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-411
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-411
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-412
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-412
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-413
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-413
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-414
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-414
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-415
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-415
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-416
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-416
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-417
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-417
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-418
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-418
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-419
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-419
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-420
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-420
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-421
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-421
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-422
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-422
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-423
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-423
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-424
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-424
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-425
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-425
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-426
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-426
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-427
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-427
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-428
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-428
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-429
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-429
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-430
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-430
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-431
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-431
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-432
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-432
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-433
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-433
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-434
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-434
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-435
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-435
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-436
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-436
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-437
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-437
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-438
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-438
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-439
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-439
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-440
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-440
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-441
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-441
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-442
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-442
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-443
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-443
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-444
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-444
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-445
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-445
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-446
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-446
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-447
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-447
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-448
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-448
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-449
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-449
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-450
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-450
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-451
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-451
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-452
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-452
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-453
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-453
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-454
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-454
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-455
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-455
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-456
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-456
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-457
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-457
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-458
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-458
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-459
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-459
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-460
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-460
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-461
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-461
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-462
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-462
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-463
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-463
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-464
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-464
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-465
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-465
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-466
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-466
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-467
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-467
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-468
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-468
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-469
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-469
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-470
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-470
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-471
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-471
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-472
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-472
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-473
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-473
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-474
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-474
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-475
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-475
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-476
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-476
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-477
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-477
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-478
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-478
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-479
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-479
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-480
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-480
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-481
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-481
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-482
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-482
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-483
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-483
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-484
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-484
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-485
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-485
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-486
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-486
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-487
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-487
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-488
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-488
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-489
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-489
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-490
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-490
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-491
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-491
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-492
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-492
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-493
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-493
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-494
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-494
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-495
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-495
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-496
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-496
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-497
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-497
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-498
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-498
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-499
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-499
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+usernameField-500
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField-500
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-1.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-2.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-3.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-4.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-5.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-6.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-7.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-8.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-9.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-10.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-11.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-12.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-13.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-14.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-15.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-16.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-17.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-18.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-19.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-20.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-21.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-22.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-23.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-24.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-25.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-26.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-27.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-28.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-29.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-30.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-31.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-32.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-33.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-34.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-35.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-36.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-37.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-38.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-39.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-40.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-41.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-42.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-43.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-44.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-45.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-46.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-47.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-48.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-49.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-50.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-51.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-52.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-53.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-54.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-55.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-56.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-57.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-58.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-59.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-60.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-61.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-62.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-63.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-64.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-65.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-66.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-67.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-68.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-69.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-70.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-71.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-72.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-73.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-74.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-75.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHmiTaseYjkkBBAA0ILJTFSa5CnlpD5PTEYR
+http://cgi.site.org
+.
+http://dummyhost-76.site.org
+usernameField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECEnlbhAkNBbBBBCexD5eaffSLGH/ORiFlQ4X
+*passwordField
+MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcE