From da487f3870bc35e485a7c0da0dcc5915388aafa9 Mon Sep 17 00:00:00 2001 From: Ignace Date: Tue, 25 Mar 2025 20:32:26 +0000 Subject: [PATCH] first commit --- AccessControl.py | 40 + Config.py | 8 + FlaskHandlerExamples.py | 79 ++ FlowerServices.py | 269 ++++ Log.py | 20 + README.md | 23 + SecretServices.py | 315 +++++ Services.py | 272 ++++ apache.conf | 9 + client/Daisy.py | 17 + client/test | 7 + db.sql | 139 ++ dumpl.py | 54 + flowers.py | 200 +++ flowers.wsgi | 7 + import.py | 28 + pins.csv | 317 +++++ static/Clouds.jpg | Bin 0 -> 232112 bytes static/Edit-icon.png | Bin 0 -> 3792 bytes static/MochiKit/Async.js | 682 ++++++++++ static/MochiKit/Base.js | 1489 +++++++++++++++++++++ static/MochiKit/Color.js | 863 ++++++++++++ static/MochiKit/DOM.js | 1256 ++++++++++++++++++ static/MochiKit/DateTime.js | 222 ++++ static/MochiKit/DragAndDrop.js | 793 +++++++++++ static/MochiKit/Format.js | 304 +++++ static/MochiKit/Iter.js | 844 ++++++++++++ static/MochiKit/Logging.js | 315 +++++ static/MochiKit/LoggingPane.js | 353 +++++ static/MochiKit/MochiKit.js | 188 +++ static/MochiKit/MockDOM.js | 115 ++ static/MochiKit/Position.js | 236 ++++ static/MochiKit/Selector.js | 415 ++++++ static/MochiKit/Signal.js | 897 +++++++++++++ static/MochiKit/Sortable.js | 589 +++++++++ static/MochiKit/Style.js | 594 +++++++++ static/MochiKit/Test.js | 162 +++ static/MochiKit/Visual.js | 2026 +++++++++++++++++++++++++++++ static/MochiKit/__package__.js | 18 + static/arrow.gif | Bin 0 -> 462 bytes static/arrowsub.gif | Bin 0 -> 462 bytes static/arrowsub.png | Bin 0 -> 86 bytes static/file-icons.png | Bin 0 -> 42702 bytes static/flower.css | 27 + static/font-awesome.css | 1338 +++++++++++++++++++ static/geomarkers.js | 22 + static/grids-responsive-min.css | 7 + static/grids-responsive-min.css.1 | 7 + static/hsep.png | Bin 0 -> 164 bytes static/icon_minus.gif | Bin 0 -> 89 bytes static/icon_plus.gif | Bin 0 -> 92 bytes static/jquery-min.js | 4 + static/logo.png | Bin 0 -> 1935569 bytes static/mainbk.png | Bin 0 -> 290 bytes static/marketing.css | 281 ++++ static/menu.css | 224 ++++ static/menu.js | 384 ++++++ static/pure-min.css | 11 + static/styles.css | 113 ++ static/testjs.html | 135 ++ templates/common.html | 75 ++ templates/create.html | 35 + templates/edit.html | 45 + templates/index.html | 37 + templates/list.html | 51 + templates/rehush.html | 40 + templates/show.html | 44 + test.py | 39 + test.sql | 33 + test_fernet.py | 29 + 70 files changed, 17146 insertions(+) create mode 100644 AccessControl.py create mode 100644 Config.py create mode 100644 FlaskHandlerExamples.py create mode 100644 FlowerServices.py create mode 100644 Log.py create mode 100644 README.md create mode 100644 SecretServices.py create mode 100644 Services.py create mode 100644 apache.conf create mode 100644 client/Daisy.py create mode 100644 client/test create mode 100644 db.sql create mode 100644 dumpl.py create mode 100644 flowers.py create mode 100644 flowers.wsgi create mode 100644 import.py create mode 100644 pins.csv create mode 100644 static/Clouds.jpg create mode 100644 static/Edit-icon.png create mode 100644 static/MochiKit/Async.js create mode 100644 static/MochiKit/Base.js create mode 100644 static/MochiKit/Color.js create mode 100644 static/MochiKit/DOM.js create mode 100644 static/MochiKit/DateTime.js create mode 100644 static/MochiKit/DragAndDrop.js create mode 100644 static/MochiKit/Format.js create mode 100644 static/MochiKit/Iter.js create mode 100644 static/MochiKit/Logging.js create mode 100644 static/MochiKit/LoggingPane.js create mode 100644 static/MochiKit/MochiKit.js create mode 100644 static/MochiKit/MockDOM.js create mode 100644 static/MochiKit/Position.js create mode 100644 static/MochiKit/Selector.js create mode 100644 static/MochiKit/Signal.js create mode 100644 static/MochiKit/Sortable.js create mode 100644 static/MochiKit/Style.js create mode 100644 static/MochiKit/Test.js create mode 100644 static/MochiKit/Visual.js create mode 100644 static/MochiKit/__package__.js create mode 100644 static/arrow.gif create mode 100644 static/arrowsub.gif create mode 100644 static/arrowsub.png create mode 100644 static/file-icons.png create mode 100644 static/flower.css create mode 100644 static/font-awesome.css create mode 100644 static/geomarkers.js create mode 100644 static/grids-responsive-min.css create mode 100644 static/grids-responsive-min.css.1 create mode 100644 static/hsep.png create mode 100755 static/icon_minus.gif create mode 100755 static/icon_plus.gif create mode 100644 static/jquery-min.js create mode 100644 static/logo.png create mode 100644 static/mainbk.png create mode 100644 static/marketing.css create mode 100644 static/menu.css create mode 100755 static/menu.js create mode 100644 static/pure-min.css create mode 100644 static/styles.css create mode 100644 static/testjs.html create mode 100644 templates/common.html create mode 100644 templates/create.html create mode 100644 templates/edit.html create mode 100644 templates/index.html create mode 100644 templates/list.html create mode 100644 templates/rehush.html create mode 100644 templates/show.html create mode 100644 test.py create mode 100644 test.sql create mode 100644 test_fernet.py diff --git a/AccessControl.py b/AccessControl.py new file mode 100644 index 0000000..ba5a5d5 --- /dev/null +++ b/AccessControl.py @@ -0,0 +1,40 @@ +from Config import * +import pickle, os +import datetime +from Log import Log + +class Access(): + access_list = [] + + def __init__(self): + five_minutes_ago = datetime.datetime.now() - datetime.timedelta(minutes=5) + new_list = [] + if os.path.exists(ACCESSFILE): + with open(ACCESSFILE, 'rb') as pf: + self.access_list = pickle.load(pf) + for entry in self.access_list: + if entry['time'] > five_minutes_ago: + new_list.append(entry) + self.access_list = new_list + + def granted(self, ipaddress): + result = 0 + for entry in self.access_list: + if entry['ip'] == ipaddress: + result += 1 + + if result<3: + return True + + Log.info("Access denied for {}".format(ipaddress)) + self.deny(ipaddress) + return False + + + def deny(self, ipaddress): + now = datetime.datetime.now() + self.access_list.append({'ip': ipaddress, 'time': now}) + with open(ACCESSFILE, 'wb') as pf: + pickle.dump(self.access_list, pf, 2) + + diff --git a/Config.py b/Config.py new file mode 100644 index 0000000..2db09b6 --- /dev/null +++ b/Config.py @@ -0,0 +1,8 @@ + +LOGFILE = '/tmp/wsgi_flowers.log' +DEBUG = 0 +MAXTEXTLEN = 70 +MINFIELDLEN = 3 +INFO = 1 +DONOTSETFILTER = 'DoNotSetFilterinCookie' +ACCESSFILE = '/tmp/wsgi_flower_accessfile' diff --git a/FlaskHandlerExamples.py b/FlaskHandlerExamples.py new file mode 100644 index 0000000..d045579 --- /dev/null +++ b/FlaskHandlerExamples.py @@ -0,0 +1,79 @@ +@app.route('/loadconfig' , methods=['GET']) +def loadconfig(): + user=None + mode='text' + try: + user = request.args.get('userId') + mode = request.args.get('mode') + except HTTPException as err: + print("http error: {0}".format(err)) + except: + print('some error', sys.exc_info()[0]) + cfg=Dashboard(userId=user) + resp = make_response(json.dumps({'plugs':cfg.plugs.listAsText()})) + resp.headers['Content-type'] = 'application/json; charset=utf-8' + return resp + +@app.route('/loadPlugin' , methods=['GET']) +def loadPlugin(): + try: + plname = request.args.get('plugin') + params = request.args.get('parameters') + ClassType = getattr(Plugin, plname) + p = ClassType(params) + resp = make_response(json.dumps({'plugin':p.asHtml()})) + except HTTPException as err: + print("http error: {0}".format(err)) + resp = make_response(json.dumps({'plugin':err})) + except: + print('some error', sys.exc_info()[0]) + resp = make_response(json.dumps({'plugin':'System error loading plugin'})) + resp.headers['Content-type'] = 'application/json; charset=utf-8' + return resp + +@app.route('/saveplugs' , methods=['POST']) +def saveplugs(): + user=request.form['userId'] + mode=request.form['mode'] + plugs=request.form['plugs'] + cfg=Dashboard(userId=user) + cfg.updatePlugs(plugs) + cfg.save() + resp = make_response(json.dumps({'plugs':cfg.plugs.listAsText()})) + resp.headers['Content-type'] = 'application/json; charset=utf-8' + return resp + +@app.route('/json', methods=['GET']) +def myjson(): + user=request.form['userId'] + resp = make_response(json.dumps({'plugs':'user'})) + resp.headers['Content-type'] = 'application/json; charset=utf-8' + return resp + +@app.route('/upload', methods=['GET']) +def upload(): + resp = make_response('function upload') + resp.headers['Content-type'] = 'text/plain; charset=utf-8' + if request.method == 'GET': + try: + f = request.args.get('user') + print(f) + except HTTPException as err: + print("http error: {0}".format(err)) + except: + print('some error', sys.exc_info()[0]) + return resp + +@app.route('/echo' , methods=['GET']) +def echo(): + text=None + try: + text = request.args.get('text') + except HTTPException as err: + print("http error: {0}".format(err)) + except: + print('some error', sys.exc_info()[0]) + resp = make_response(text) + resp.headers['Content-type'] = 'text/plain; charset=utf-8' + return resp + diff --git a/FlowerServices.py b/FlowerServices.py new file mode 100644 index 0000000..9e1a7d9 --- /dev/null +++ b/FlowerServices.py @@ -0,0 +1,269 @@ +from fernet import Fernet +from Log import Log +from Config import * +import pymysql as mdb + +#encryption stuff +SECRET = b'XBxB603cX_mULEXxfavOg3FDc0Ox3gChwYEY-Uxd3tE=' + + +class Flower(): + + def __init__(self, user, pwd): + self.db = 'Flowers' + self.db_username = user + '_' + self.db_password = (pwd*10)[:43]+"=" + self.customer_table = self.db_username + self.fernet = Fernet(bytes(self.db_password, 'ascii')) + + def encode(self, s): + if len(s)==0: + return '' + return self.fernet.encrypt(s.encode()).decode() + + def decode(self, s): + if len(s)==0: + return '' + return self.fernet.decrypt(s.encode()).decode() + + def add(self, organization, myname, myid, secret, deleted=0, timestamp=None): + ''' POST a new flower + ''' + if len(organization)>MINFIELDLEN and len(myid)>MINFIELDLEN and len(secret)>MINFIELDLEN: + sql = 'INSERT INTO {} (organization ,myID ,myName ,mySecret, deleted) VALUES ("{}", "{}", "{}", "{}", {})'.format(self.customer_table, organization, self.encode(myid), self.encode(myname), self.encode(secret), deleted) + if timestamp is not None: + sql = 'INSERT INTO {} (organization ,myID ,myName ,mySecret, deleted, dateCreated) VALUES ("{}", "{}", "{}", "{}", {}, "{}")'.format(self.customer_table, organization, self.encode(myid), self.encode(myname), self.encode(secret), deleted, timestamp) + result, data = self.do_db_commit(sql) + Log.debug(result) + if result==1: + return {'organization': organization, 'dateCreated': 'STORED', 'myID': myid, 'myName': myname,'mySecret': secret} + return {'organization': organization, 'dateCreated': 'FAILED', 'myID': myid, 'myName': myname,'mySecret': secret} + + + def all(self, isdeleted=0): + ''' GET flowers list + ''' + #sql = "SELECT organization, myID, myName, dateCreated FROM %s " % (self.customer_table) + sql = """ + select uniqueflowers.organization, uniqueflowers.myID, uniqueflowers.dateCreated from {0} as uniqueflowers + inner join ( + select organization, max(dateCreated) as lastCreated from {0} group by organization order by dateCreated DESC) allflowers + on allflowers.organization=uniqueflowers.organization and lastCreated=uniqueflowers.dateCreated where uniqueflowers.deleted={1} + """.format(self.customer_table, isdeleted) + result, data = self.do_db_allrows(sql) + #Log.debug(sql_result) + all_flowers=[] + if result==1: + for row in data: + all_flowers.append({'organization': str(row[0]), 'myID': self.decode(row[1]), 'dateCreated': str(row[2])}) + return all_flowers + + + + def one(self, organization, datetimestamp ): + ''' flower for user, org and datetime + ''' + result = -1 + secret = ':-(' + sql = "SELECT mySecret, myID, myName FROM %s where organization='%s' and dateCreated='%s' order by dateCreated DESC limit 1" % (self.customer_table, organization, datetimestamp) + result, data = self.do_db_1row(sql) + if result == 1: + return {'organization': organization, 'dateCreated': datetimestamp, 'myID': self.decode(data[1]), 'myName': self.decode(data[2]),'mySecret': self.decode(data[0])} + return {'organization': organization, 'dateCreated': datetimestamp, 'myID': '', 'myName': '','mySecret': '-- Not found --'} + + + def deactivate(self, organization, datetimestamp ): + ''' flower for user, org and datetime + ''' + result = -1 + secret = ':-(' + sql = "update {} set deleted=1 where organization='{}' and dateCreated='{}' ".format(self.customer_table, organization, datetimestamp) + result, data = self.do_db_commit(sql) + if result == 1: + secret = '- DELETED -' + return {'organization': organization, 'dateCreated': datetimestamp, 'myID': '', 'myName': '','mySecret': secret} + + def empty(self): + ''' empty flower + ''' + return {'organization': '', 'dateCreated': '', 'myID': '', 'myName': '','mySecret': ''} + + + def numberOfEntries(self): + ''' GET login info, check if its valid + ''' + sql = "SELECT count(*) FROM {};".format(self.customer_table) + result, data = self.do_db_1row(sql) + if result == 1: + return(data[0]) + return -1 + + + def update_pwd(self, new_pwd): + + long_newpwd = (new_pwd*10)[:43]+"=" + self.new_fernet = Fernet(bytes(long_newpwd, 'ascii')) + + def new_encode(s): + if len(s)==0: + return '' + return self.new_fernet.encrypt(s.encode()).decode() + + end_result = "ERROR updating hushes\n" + sql = """ + select myID, myName, mySecret, organization, dateCreated from {0}""".format(self.customer_table) + result, data = self.do_db_allrows(sql) + # Log.debug(sql_result) + if result == 1: + # convert all hushes + sql = "" + for row in data: + sql += "update {} set myID='{}', myName='{}', mySecret='{}' where organization='{}' and dateCreated='{}';\n".\ + format(self.customer_table, + new_encode(self.decode(row[0])), + new_encode(self.decode(row[1])), + new_encode(self.decode(row[2])),row[3], row[4]) + + result, data = self.do_db_commit(sql) + if result == 1: + end_result = "ERROR updating user-password\n" + # update the password of the user + sql = "SET PASSWORD FOR '{}'@'localhost' = PASSWORD('{}'); ".format(self.db_username, long_newpwd) + result, data = self.do_db_commit(sql) + if result == 1: + end_result = "SUCCESSFULLY updated, now login again\n" + return end_result + + + def do_db_commit(self, sql): + Log.debug('INSc: '+sql) + result = 0 + data = '' + con = None + try: + con = mdb.connect(host='localhost', passwd=self.db_password, user=self.db_username, db=self.db); + cur = con.cursor() + if ";\n" in sql: + for s in sql.split(";\n"): + if len(s)>1: + cur.execute(s) + else: + cur.execute(sql) + cur.close() + con.commit() + result = 1 + except mdb.Error as e: + m = "Error %d: %s" % (e.args[0],e.args[1]) + data = {'message': m} + Log.debug(m) + result = -1 + finally: + if con: + con.close() + return result, data + + + def do_db_1row(self, sql): + Log.debug('1row sql: '+sql) + result = 0 + con = None + try: + con = mdb.connect(host='localhost', passwd=self.db_password, user=self.db_username, db=self.db); + cur = con.cursor() + cur.execute(sql) + data = cur.fetchone() + if data: + result = 1 + except mdb.Error as e: + m = "Error %d: %s" % (e.args[0],e.args[1]) + data = {'message': m} + Log.debug(m) + result = -1 + finally: + if con: + con.close() + return result, data + + def do_db_allrows(self, sql): + Log.debug('all rows sql: '+sql) + result = 0 + con = None + try: + con = mdb.connect(host='localhost', passwd=self.db_password, user=self.db_username, db=self.db); + cur = con.cursor() + cur.execute(sql) + data = cur.fetchall() + if data: + result = 1 + except mdb.Error as e: + m = "Error %d: %s" % (e.args[0],e.args[1]) + data = {'message': m} + Log.debug(m) + result = -1 + finally: + if con: + con.close() + return result, data + + +class SuperFlower(Flower): + + def __init__(self, customer, pwd): + super().__init__(customer, pwd) + self.customer_name = customer + '_' + self.customer_pwd = (pwd*10)[:43]+"=" + + self.db_username = 'flower' + self.db_password = '608f0b988db4a96066af7dd8870de96c' + + def createNewTable(self): + # create new table and user + sql = """ + CREATE TABLE `{}` ( + `organization` varchar(80) NOT NULL, + `myID` varchar(255) NOT NULL, + `myName` varchar(255) NOT NULL, + `mySecret` varchar(255) NOT NULL, + `dateCreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `deleted` int(11) DEFAULT '0', + PRIMARY KEY (`organization`,`dateCreated`) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""".format(self.customer_table) + result, data = self.do_db_1row(sql) + if result < 0: + Log.info("SQL ERROR:") + Log.info(data) + return 0 + + sql = """create user {}@localhost identified by '{}';""".format(self.customer_name, self.customer_pwd) + result, data = self.do_db_1row(sql) + if result < 0: + Log.info("SQL ERROR:") + Log.info(data) + return 0 + + sql = """grant select,update,insert on Flowers.{} to {}@localhost;""".format(self.customer_table, self.customer_name) + result, data = self.do_db_1row(sql) + if result < 0: + Log.info("SQL ERROR:") + Log.info(data) + return 0 + + self.flush_privs() + + return 1 + + def flush_privs(self): + sql = """flush privileges;""" + result, data = self.do_db_1row(sql) + if result < 0: + Log.info("SQL ERROR:") + Log.info(data) + return 0 + return 1 + + + + + +if __name__ == '__main__': + print("this is a library, sorry dude") diff --git a/Log.py b/Log.py new file mode 100644 index 0000000..7ef5550 --- /dev/null +++ b/Log.py @@ -0,0 +1,20 @@ +from sys import stderr +from Config import * + +class Log: + @staticmethod + def info(someString): + if INFO: + f = open(LOGFILE, "a") + f.write( "flower: %s \n" % someString ) + f.close() + if DEBUG: + print(someString) + + @staticmethod + def debug(someString): + if DEBUG: + f = open(LOGFILE, "a") + f.write( "flower: %s \n" % someString ) + f.close() + diff --git a/README.md b/README.md new file mode 100644 index 0000000..ab242b9 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +to install the dev env: + + +sudo pip3 install virtualenv +virtualenv p3env +source p3env/bin/activate +pip install uwsgi flask fernet pymysql + + +to install kivi in the venv: +pip install Cython==0.23 +sudo apt-get install libgl1-mesa-dev +pip install kivy +pip install pygame +vi ~/.kivy/config.ini + change: multisamples = 0 + + +# as root in mysql +create database Flowers; +grant create,select,update,insert,grant option on Flowers.* to flower@localhost identified by '608f0b988db4a96066af7dd8870de96c'; +grant create user,reload on *.* to flower@localhost; +flush privileges; \ No newline at end of file diff --git a/SecretServices.py b/SecretServices.py new file mode 100644 index 0000000..f18c470 --- /dev/null +++ b/SecretServices.py @@ -0,0 +1,315 @@ +#################### +# +# file is replaced by FlowerServices.py +# +1= # intentional python syntax error +# +##################### + +from Crypto.Cipher import AES +from Crypto.Hash import MD5 +import base64 +from Log import Log +from Config import * +import pymysql as mdb + +#encryption stuff +SECRET='HSPh1O5vc6YY2Xt8jUxlTp' +BLOCK_SIZE = 32 +PADDING='_' +# one-liner to sufficiently pad the text to be encrypted +pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING + +def md5(message): + hash = MD5.new() + hash.update(message.encode('utf-8')) + return hash.hexdigest() + + +class Flower(): + + def __init__(self, user, pwd): + self.db = 'Flowers' + self.db_username = user + '_' + self.db_password = md5(pwd) + + self.customer_table = self.db_username + self.cipher = AES.new(pad(SECRET + pwd)) + + def encode(self, s): + return str(base64.b64encode(self.cipher.encrypt(pad(s))).decode("utf-8")) + + def decode(self, e): + return str(self.cipher.decrypt(base64.b64decode(e)).decode("utf-8")).rstrip(PADDING) + + def add(self, organization, myname, myid, secret, deleted=0, timestamp=None): + ''' POST a new flower + ''' + if len(organization)>MINFIELDLEN and len(myid)>MINFIELDLEN and len(secret)>MINFIELDLEN: + sql = "INSERT INTO {} (organization ,myID ,myName ,mySecret, deleted) VALUES ('{}', '{}', '{}', '{}', {})".format(self.customer_table, organization, self.encode(myid), self.encode(myname), self.encode(secret), deleted) + if timestamp is not None: + sql = "INSERT INTO {} (organization ,myID ,myName ,mySecret, deleted, dateCreated) VALUES ('{}', '{}', '{}', '{}', {}, '{}')".format(self.customer_table, organization, self.encode(myid), self.encode(myname), self.encode(secret), deleted, timestamp) + result, data = self.do_db_commit(sql) + Log.debug(result) + if result==1: + return {'organization': organization, 'dateCreated': 'STORED', 'myID': myid, 'myName': myname,'mySecret': secret} + return {'organization': organization, 'dateCreated': 'FAILED', 'myID': myid, 'myName': myname,'mySecret': secret} + + + def all(self, isdeleted=0): + ''' GET flowers list + ''' + #sql = "SELECT organization, myID, myName, dateCreated FROM %s " % (self.customer_table) + sql = """ + select uniqueflowers.organization, uniqueflowers.myID, uniqueflowers.dateCreated from {0} as uniqueflowers + inner join ( + select organization, max(dateCreated) as lastCreated from {0} group by organization order by dateCreated DESC) allflowers + on allflowers.organization=uniqueflowers.organization and lastCreated=uniqueflowers.dateCreated where uniqueflowers.deleted={1} + """.format(self.customer_table, isdeleted) + result, data = self.do_db_allrows(sql) + #Log.debug(sql_result) + all_flowers=[] + if result==1: + for row in data: + all_flowers.append({'organization': str(row[0]), 'myID': self.decode(row[1]), 'dateCreated': str(row[2])}) + return all_flowers + + + + def one(self, organization, datetimestamp ): + ''' flower for user, org and datetime + ''' + result = -1 + secret = ':-(' + sql = "SELECT mySecret, myID, myName FROM %s where organization='%s' and dateCreated='%s' order by dateCreated DESC limit 1" % (self.customer_table, organization, datetimestamp) + result, data = self.do_db_1row(sql) + if result == 1: + return {'organization': organization, 'dateCreated': datetimestamp, 'myID': self.decode(data[1]), 'myName': self.decode(data[2]),'mySecret': self.decode(data[0])} + return {'organization': organization, 'dateCreated': datetimestamp, 'myID': '', 'myName': '','mySecret': '-- Not found --'} + + + def deactivate(self, organization, datetimestamp ): + ''' flower for user, org and datetime + ''' + result = -1 + secret = ':-(' + sql = "update {} set deleted=1 where organization='{}' and dateCreated='{}' ".format(self.customer_table, organization, datetimestamp) + result, data = self.do_db_commit(sql) + if result == 1: + secret = '- DELETED -' + return {'organization': organization, 'dateCreated': datetimestamp, 'myID': '', 'myName': '','mySecret': secret} + + def empty(self): + ''' empty flower + ''' + return {'organization': '', 'dateCreated': '', 'myID': '', 'myName': '','mySecret': ''} + + + def numberOfEntries(self): + ''' GET login info, check if its valid + ''' + sql = "SELECT count(*) FROM {};".format(self.customer_table) + result, data = self.do_db_1row(sql) + if result == 1: + return(data[0]) + return -1 + + + def update_pwd(self, new_pwd): + newcipher = AES.new(pad(SECRET + new_pwd)) + + def new_encode(s): + return str(base64.b64encode(newcipher.encrypt(pad(s))).decode("utf-8")) + + end_result = "ERROR updating hushes\n" + sql = """ + select myID, myName, mySecret, organization, dateCreated from {0}""".format(self.customer_table) + result, data = self.do_db_allrows(sql) + # Log.debug(sql_result) + if result == 1: + # convert all hushes + sql = "" + for row in data: + sql += "update {} set myID='{}', myName='{}', mySecret='{}' where organization='{}' and dateCreated='{}';\n".\ + format(self.customer_table, + new_encode(self.decode(row[0])), + new_encode(self.decode(row[1])), + new_encode(self.decode(row[2])),row[3], row[4]) + + result, data = self.do_db_commit(sql) + if result == 1: + end_result = "ERROR updating user-password\n" + # update the password of the user + sql = "SET PASSWORD FOR '{}'@'localhost' = PASSWORD('{}'); ".format(self.db_username, md5(new_pwd)) + result, data = self.do_db_commit(sql) + if result == 1: + end_result = "SUCCESSFULLY updated, now login again\n" + return end_result + + + def do_db_commit(self, sql): + Log.debug('INSc: '+sql) + result = 0 + data = '' + con = None + try: + con = mdb.connect(host='localhost', passwd=self.db_password, user=self.db_username, db=self.db); + cur = con.cursor() + if ";\n" in sql: + for s in sql.split(";\n"): + if len(s)>1: + cur.execute(s) + else: + cur.execute(sql) + cur.close() + con.commit() + result = 1 + except mdb.Error as e: + m = "Error %d: %s" % (e.args[0],e.args[1]) + data = {'message': m} + Log.debug(m) + result = -1 + finally: + if con: + con.close() + return result, data + + + def do_db_1row(self, sql): + Log.debug('1row sql: '+sql) + result = 0 + con = None + try: + con = mdb.connect(host='localhost', passwd=self.db_password, user=self.db_username, db=self.db); + cur = con.cursor() + cur.execute(sql) + data = cur.fetchone() + if data: + result = 1 + except mdb.Error as e: + m = "Error %d: %s" % (e.args[0],e.args[1]) + data = {'message': m} + Log.debug(m) + result = -1 + finally: + if con: + con.close() + return result, data + + def do_db_allrows(self, sql): + Log.debug('all rows sql: '+sql) + result = 0 + con = None + try: + con = mdb.connect(host='localhost', passwd=self.db_password, user=self.db_username, db=self.db); + cur = con.cursor() + cur.execute(sql) + data = cur.fetchall() + if data: + result = 1 + except mdb.Error as e: + m = "Error %d: %s" % (e.args[0],e.args[1]) + data = {'message': m} + Log.debug(m) + result = -1 + finally: + if con: + con.close() + return result, data + + +class SuperFlower(Flower): + + def __init__(self, customer, pwd): + super().__init__(customer, pwd) + self.customer_name = customer + '_' + self.customer_pwd = pwd + + self.db_username = 'flower' + self.db_password = md5('flower') + + def createNewTable(self): + # create new table and user + sql = """ + CREATE TABLE `{}` ( + `organization` varchar(80) NOT NULL, + `myID` varchar(129) NOT NULL, + `myName` varchar(129) NOT NULL, + `mySecret` varchar(65) NOT NULL, + `dateCreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `deleted` int(11) DEFAULT '0', + PRIMARY KEY (`organization`,`dateCreated`) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""".format(self.customer_table) + result, data = self.do_db_1row(sql) + if result < 0: + Log.info("SQL ERROR:") + Log.info(data) + return 0 + + sql = """create user {}@localhost identified by '{}';""".format(self.customer_name, md5(self.customer_pwd)) + result, data = self.do_db_1row(sql) + if result < 0: + Log.info("SQL ERROR:") + Log.info(data) + return 0 + + sql = """grant select,update,insert on Flowers.{} to {}@localhost;""".format(self.customer_table, self.customer_name) + result, data = self.do_db_1row(sql) + if result < 0: + Log.info("SQL ERROR:") + Log.info(data) + return 0 + + self.flush_privs() + + return 1 + + def flush_privs(self): + sql = """flush privileges;""" + result, data = self.do_db_1row(sql) + if result < 0: + Log.info("SQL ERROR:") + Log.info(data) + return 0 + return 1 + + def migrate(self, old_customer_name): + OLDSECRET = 'HSPh1O5vc6YY2Xt8jUxlTpd*DZsjMMAH' + OLDCIPHER = AES.new(OLDSECRET) + old_DecodeAES = lambda e: str(OLDCIPHER.decrypt(base64.b64decode(e)).decode("utf-8")).rstrip(PADDING) + + def sql_datetime(datetime_type): + return datetime_type.strftime("%Y-%m-%d %H:%M:%S") + + end_result = "ERROR creting new table\n" + if self.createNewTable(): + + + end_result = "ERROR updating hushes\n" + sql = """ + select myID, myName, mySecret, organization, dateCreated, deleted from {0}""".format(old_customer_name) + # 0 1 2 3 4 5 + result, data = self.do_db_allrows(sql) + # Log.debug(sql_result) + if result == 1: + # convert all hushes + sql = "" + for row in data: + #sql += "insert {} set organization='{}', myID='{}', myName='{}', mySecret='{}', deleted={}, dateCreated='{}' where organization='{}' and dateCreated='{}';\n". \ + sql += "INSERT INTO {} (organization ,myID ,myName ,mySecret, deleted, dateCreated) VALUES ('{}', '{}', '{}', '{}', {}, '{}') ;\n".\ + format(self.customer_table, + row[3], + self.encode(row[0]), + self.encode(row[1]), + self.encode(old_DecodeAES(row[2])), + row[5], + sql_datetime(row[4])) + result, data = self.do_db_commit(sql) + if result == 1: + end_result = "SUCCESSFULLY updated, now login again\n" + return end_result + + + +if __name__ == '__main__': + print("this is a library, sorry dude") diff --git a/Services.py b/Services.py new file mode 100644 index 0000000..5f347a3 --- /dev/null +++ b/Services.py @@ -0,0 +1,272 @@ +#################### +# +# file is replaced by SecretServices.py +# +1= # intentional python syntax error +# +#################### + + +from Crypto.Cipher import AES +from Crypto.Hash import MD5 +import base64 +import os, time, re, sys +from Log import Log +from Config import * +import json +import pymysql as mdb +import datetime +import hashlib + + + +#encryption stuff +SECRET='HSPh1O5vc6YY2Xt8jUxlTpd*DZsjMMAH' +BLOCK_SIZE = 32 +PADDING='_' +# one-liner to sufficiently pad the text to be encrypted +pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING +# one-liners to encrypt/encode and decrypt/decode a string +# encrypt with AES, encode with base64 +CIPHER = AES.new(SECRET) +EncodeAES = lambda s: str(base64.b64encode(CIPHER.encrypt(pad(s))).decode("utf-8")) +DecodeAES = lambda e: str(CIPHER.decrypt(base64.b64decode(e)).decode("utf-8")).rstrip(PADDING) + +def md5(message): + hash = MD5.new() + hash.update(message.encode('utf-8')) + return hash.hexdigest() + + + +class Flower(): + + def __init__(self, user, pwd): + self.database = 'Flowers' + self.table = user + self.username = user + self.password = md5(pwd) + + + def add(self, organization, myname, myid, secret): + ''' POST a new flower + ''' + if len(organization)>MINFIELDLEN and len(myid)>MINFIELDLEN and len(secret)>MINFIELDLEN: + sql = "INSERT INTO {} (organization ,myID ,myName ,mySecret, deleted) VALUES ('{}', '{}', '{}', '{}', 0)".format(self.table, organization, myid, myname, EncodeAES(secret)) + result, data = self.do_db_commit(sql) + Log.debug(result) + if result==1: + return {'organization': organization, 'dateCreated': 'STORED', 'myID': myid, 'myName': myname,'mySecret': secret} + return {'organization': organization, 'dateCreated': 'FAILED', 'myID': myid, 'myName': myname,'mySecret': secret} + + + def all(self, isdeleted=0): + ''' GET flowers list + ''' + #sql = "SELECT organization, myID, myName, dateCreated FROM %s " % (self.table) + sql = """ + select uniqueflowers.organization, uniqueflowers.myID, uniqueflowers.dateCreated from {0} as uniqueflowers + inner join ( + select organization, max(dateCreated) as lastCreated from {0} group by organization order by dateCreated DESC) allflowers + on allflowers.organization=uniqueflowers.organization and lastCreated=uniqueflowers.dateCreated where uniqueflowers.deleted={1} + """.format(self.table, isdeleted) + result, data = self.do_db_allrows(sql) + #Log.debug(sql_result) + all_flowers=[] + if result==1: + for row in data: + all_flowers.append({'organization': str(row[0]), 'myID': str(row[1]), 'dateCreated': str(row[2])}) + return all_flowers + + + + def one(self, organization, datetimestamp ): + ''' flower for user, org and datetime + ''' + result = -1 + secret = ':-(' + sql = "SELECT mySecret, myID, myName FROM %s where organization='%s' and dateCreated='%s' order by dateCreated DESC limit 1" % (self.table, organization, datetimestamp) + result, data = self.do_db_1row(sql) + if result == 1: + secret = DecodeAES(data[0]) + return {'organization': organization, 'dateCreated': datetimestamp, 'myID': data[1], 'myName': data[2],'mySecret': secret} + + def deactivate(self, organization, datetimestamp ): + ''' flower for user, org and datetime + ''' + result = -1 + secret = ':-(' + sql = "update %s set deleted=1 where organization='%s' and dateCreated='%s' " % (self.table, organization, datetimestamp) + result, data = self.do_db_commit(sql) + if result == 1: + secret = '- DELETED -' + return {'organization': organization, 'dateCreated': datetimestamp, 'myID': '', 'myName': '','mySecret': secret} + + def empty(self): + ''' empty flower + ''' + return {'organization': '', 'dateCreated': '', 'myID': '', 'myName': '','mySecret': ''} + + + + + + + + + def numberOfEntries(self): + ''' GET login info, check if its valid + ''' + sql = "SELECT count(*) FROM {};".format(self.table) + result, data = self.do_db_1row(sql) + if result == 1: + return(data[0]) + return -1 + + def do_db_commit(self, sql): + Log.debug('INSc: '+sql) + result = 0 + data = '' + con = None + try: + con = mdb.connect(host='localhost', passwd=self.password, user=self.username, db=self.database); + cur = con.cursor() + cur.execute(sql) + con.commit() + cur.close() + result = 1 + except mdb.Error as e: + m = "Error %d: %s" % (e.args[0],e.args[1]) + data = {'message': m} + Log.debug(m) + result = -1 + finally: + if con: + con.close() + return result, data + + + def do_db_1row(self, sql): + Log.debug('1row sql: '+sql) + result = 0 + con = None + try: + con = mdb.connect(host='localhost', passwd=self.password, user=self.username, db=self.database); + cur = con.cursor() + cur.execute(sql) + data = cur.fetchone() + if data: + result = 1 + except mdb.Error as e: + m = "Error %d: %s" % (e.args[0],e.args[1]) + data = {'message': m} + Log.debug(m) + result = -1 + finally: + if con: + con.close() + return result, data + + def do_db_allrows(self, sql): + Log.debug('all rows sql: '+sql) + result = 0 + con = None + try: + con = mdb.connect(host='localhost', passwd=self.password, user=self.username, db=self.database); + cur = con.cursor() + cur.execute(sql) + data = cur.fetchall() + if data: + result = 1 + except mdb.Error as e: + m = "Error %d: %s" % (e.args[0],e.args[1]) + data = {'message': m} + Log.debug(m) + result = -1 + finally: + if con: + con.close() + return result, data + + +class SuperFlower(Flower): + + def __init__(self, user, pwd): + self.database = 'Flowers' + self.table = user + self.table_hush = pwd + self.username = 'flower' + self.password = md5('flower') + + def createNewTable(self): + # create new table and user + sql = """ + CREATE TABLE `{0}` ( + `organization` varchar(50) NOT NULL, + `myID` varchar(50) NOT NULL, + `myName` varchar(50) NOT NULL, + `mySecret` varchar(50) NOT NULL, + `dateCreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `deleted` int(11) DEFAULT '0', + PRIMARY KEY (`organization`,`dateCreated`) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""".format(self.table) + result, data = self.do_db_1row(sql) + if result < 0: + Log.info("SQL ERROR:") + Log.info(data) + return 0 + + sql = """create user {0}@localhost identified by '{1}';""".format(self.table, md5(self.table_hush)) + result, data = self.do_db_1row(sql) + if result < 0: + Log.info("SQL ERROR:") + Log.info(data) + return 0 + + sql = """grant select,update,insert on Flowers.{0} to {0}@localhost;""".format(self.table) + result, data = self.do_db_1row(sql) + if result < 0: + Log.info("SQL ERROR:") + Log.info(data) + return 0 + + sql = """flush privileges;""" + result, data = self.do_db_1row(sql) + if result < 0: + Log.info("SQL ERROR:") + Log.info(data) + return 0 + + return 1 + + + def re_hush(self, new_hush): + + + end_result = "Starting Rehush\n" + sql = """ + select mySecret, organization, dateCreated from {0}""".format(self.table) + result, data = self.do_db_allrows(sql) + # Log.debug(sql_result) + if result == 1: + # convert all hushes + sql = "" + for row in data: + old_hush = DecodeAES(row[0]) + sql += "update {} set mySecret='{}' where organization='{}' and dateCreated='{}';\n".format(self.table, md5(old_hush), row[1], row[2]) + result, data = self.do_db_commit(sql) + if result == 1: + end_result = "Finished Rehush\n" + end_result = "Starting update user password\n" + # update the password of the user + sql = "SET PASSWORD FOR '{}'@'localhost' = PASSWORD(md5(secret));\n".format(self.table) + sql += "flush privileges;" + result, data = self.do_db_commit(sql) + if result == 1: + end_result = "Finished update user password\n" + + + + +if __name__ == '__main__': + print("this is a library, sorry dude") diff --git a/apache.conf b/apache.conf new file mode 100644 index 0000000..5d2793d --- /dev/null +++ b/apache.conf @@ -0,0 +1,9 @@ + WSGIDaemonProcess flowers user=www-data group=www-data threads=5 + WSGIScriptAlias /flowers /usr/share/projects/Flowers/flowers.wsgi + + + WSGIProcessGroup flowers + WSGIApplicationGroup %{GLOBAL} + Order deny,allow + Allow from all + diff --git a/client/Daisy.py b/client/Daisy.py new file mode 100644 index 0000000..9fceb62 --- /dev/null +++ b/client/Daisy.py @@ -0,0 +1,17 @@ + + +import kivy +kivy.require('1.0.6') # replace with your current kivy version ! + +from kivy.app import App +from kivy.uix.label import Label + + +class MyApp(App): + + def build(self): + return Label(text='Hello world') + + +if __name__ == '__main__': + MyApp().run() \ No newline at end of file diff --git a/client/test b/client/test new file mode 100644 index 0000000..7609ebe --- /dev/null +++ b/client/test @@ -0,0 +1,7 @@ +import requests + +r = requests.post('http://0.0.0.0:8080/app', data = {'name':'piet', 'password': 'piet', 'action': 'list'}) +#r = requests.post('http://0.0.0.0:8080/app', data = {'name':'ignace', 'password': 'white', 'action': 'one', 'dateCreated': '2018-05-30 21:18:00', 'organization': 'https://mijntele2.tele2.nl/'}) +#r = requests.post('http://0.0.0.0:8080/app', data = {'name':'ignace', 'password': 'white', 'action': 'save'}) +#r = requests.post('http://0.0.0.0:8080/app', data = {'name':'ignace', 'password': 'white', 'action': 'list'}) +# print(r.text) \ No newline at end of file diff --git a/db.sql b/db.sql new file mode 100644 index 0000000..a19a004 --- /dev/null +++ b/db.sql @@ -0,0 +1,139 @@ +-- MySQL dump 10.16 Distrib 10.1.48-MariaDB, for debian-linux-gnu (x86_64) +-- +-- Host: localhost Database: Flowers +-- ------------------------------------------------------ +-- Server version 10.1.48-MariaDB-0ubuntu0.18.04.1 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `Sofie_` +-- + +DROP TABLE IF EXISTS `Sofie_`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Sofie_` ( + `organization` varchar(80) NOT NULL, + `myID` varchar(129) NOT NULL, + `myName` varchar(129) NOT NULL, + `mySecret` varchar(65) NOT NULL, + `dateCreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `deleted` int(11) DEFAULT '0', + PRIMARY KEY (`organization`,`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Sofie_` +-- + +LOCK TABLES `Sofie_` WRITE; +/*!40000 ALTER TABLE `Sofie_` DISABLE KEYS */; +INSERT INTO `Sofie_` VALUES ('Demo organisation','jzP1s6MWeGqdOOTnpTXRzAh0URRO5xNPdugdHX0emqA=','+HxD6uQBh+ZNcx3xuwMVhwh0URRO5xNPdugdHX0emqA=','STnLsq7heMT+j7F8Lpf+NQh0URRO5xNPdugdHX0emqA=','2023-03-26 15:05:28',0),('stichtingandersbekeken.nl','Ld2VpeduEZmsQSYZZmtIVwh0URRO5xNPdugdHX0emqA=','CHRRFE7nE0926B0dfR6aoAh0URRO5xNPdugdHX0emqA=','hq2CIztIEVs8UYLaT/028Qh0URRO5xNPdugdHX0emqA=','2023-03-26 15:08:10',0),('webmail contact@stichtingandersbekeken.nl','desLQDp/HK5awGqGeD0WZwj0hDTqjNnaYZkGh20cFm9Uj8b3a/1Nsb63ROt2B8J1CHRRFE7nE0926B0dfR6aoA==','CHRRFE7nE0926B0dfR6aoAh0URRO5xNPdugdHX0emqA=','gp55d9/Xyfx/NwyDPdzc2Ah0URRO5xNPdugdHX0emqA=','2023-03-26 15:11:39',0); +/*!40000 ALTER TABLE `Sofie_` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `ignace_` +-- + +DROP TABLE IF EXISTS `ignace_`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ignace_` ( + `organization` varchar(80) NOT NULL, + `myID` varchar(129) NOT NULL, + `myName` varchar(129) NOT NULL, + `mySecret` varchar(65) NOT NULL, + `dateCreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `deleted` int(11) DEFAULT '0', + PRIMARY KEY (`organization`,`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `ignace_` +-- + +LOCK TABLES `ignace_` WRITE; +/*!40000 ALTER TABLE `ignace_` DISABLE KEYS */; +INSERT INTO `ignace_` VALUES ('ABN AMRO creditcard','QCfNPPkT2gzTIBi/UjJ8HPu7x9XlsTRc8g16hvRRAZk=','NhgEbFPK7p8gwuLYbacX8hTLkqHPiDG99be3Vmo13KM=','QCfNPPkT2gzTIBi/UjJ8HGbwWYq0dNeL8AjGbGhWCBs=','2001-03-17 12:23:25',1),('ac','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','/uVYoqkiyWo4QpeWtSJaHOoI6AzSpGsdYpj538YjZk8=','2002-03-17 16:21:32',0),('account.meethue.com','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','+ULcWlS7Q0XQqFPBbVm34uoI6AzSpGsdYpj538YjZk8=','2019-04-07 06:29:03',0),('adobe','hho94vlwIITuUqZOA8OJaeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','qI8z+Wg3lX9ArC3+gX3ON+oI6AzSpGsdYpj538YjZk8=','2001-03-17 16:11:56',0),('adobe','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','9EEu4l6tkD49OftMx5qDYeoI6AzSpGsdYpj538YjZk8=','2020-10-01 19:57:33',0),('adobe','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','9EEu4l6tkD49OftMx5qDYeoI6AzSpGsdYpj538YjZk8=','2020-10-01 20:12:53',0),('adobe lidmaatschap','KwhUQqdjq8EXbSK8bEutSeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','2005-03-18 20:22:10',0),('adobe photoshop elements','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Z9m04ARrnoq4kZmdIBBBmtl+nSCTuM5owdFXNkCTZqc=','2003-03-17 16:34:28',0),('ah','U6HLgtbUs5cTCoGgwwI2TqTmunwrPHwtO9GveRj1688=','+CrBOobPMEk5OYdcMRwZxeoI6AzSpGsdYpj538YjZk8=','pIcAVE8Wc9LY8vCRuYl/GuoI6AzSpGsdYpj538YjZk8=','2003-03-17 16:30:27',0),('aim','HxwDgC168GMGXS8o7UVmZuoI6AzSpGsdYpj538YjZk8=','x5BYiywWFXymb1kxSn8AZD7rZt1XCuT0+J5OMraZ2OnqCOgM0qRrHWKY+d/GI2ZP6gjoDNKkax1imPnfxiNmTw==','8Op83SF72YM2HKXoBRukI+oI6AzSpGsdYpj538YjZk8=','2006-03-18 20:30:25',0),('aim','eZzO+CtnUum5lhczoOKX8eoI6AzSpGsdYpj538YjZk8=','bQim8PhZ+sAMqkZ6lNPh1GAdJRF9kAF6sYYVPZkas/A=','M081KxRxBuwc5pF88Vn3puoI6AzSpGsdYpj538YjZk8=','2006-03-18 20:30:49',0),('aim','XfWcnbLOIcUD7cw/7jWnE+oI6AzSpGsdYpj538YjZk8=','688rT3WToQLyFZau6ogmQuoI6AzSpGsdYpj538YjZk8=','4LCurmOu/cvGlSneVdMUW+oI6AzSpGsdYpj538YjZk8=','2006-03-18 20:31:22',0),('ajaxplorer','Jb2qK0gerpkXsledefBJ3OoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','dpxtJpUrzlScUKYAjOOmSeoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:17:59',0),('althome fiscus','OCP3CKkTIamq21vpBy04QJSjeDeygTEU/pRTYY76NfU=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','93T0zEupG4pJXQ3JwNmwiCwIrgPuT+UuwMD+QmwKR4s=','2011-03-18 21:10:48',0),('amazon.com','DRq2lEBAu2ituJLjB7EhC99cpXTVQsCfm3NVd1bGd6U=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','FSBbOBaPotxXZ7+BZMMw6uoI6AzSpGsdYpj538YjZk8=','2002-03-17 16:21:53',0),('amazon.de','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','znV3OW3WUXZU3OMX72MVdeoI6AzSpGsdYpj538YjZk8=','2009-03-18 20:46:53',0),('amazon.nl prime','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','UFlEkbJFyAe5HEg3ac5SD+oI6AzSpGsdYpj538YjZk8=','2020-07-16 08:13:03',0),('amro cc securecode','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','sVHgf1lARW8c1laXeOE8vOoI6AzSpGsdYpj538YjZk8=','2013-11-27 20:55:27',0),('android app signature','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','dueRTSJwrpHxbOblyaRtsOoI6AzSpGsdYpj538YjZk8=','2011-03-18 21:11:07',0),('anwb','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','map6nvlIc/+xsiTwvIUpM+oI6AzSpGsdYpj538YjZk8=','2003-03-17 16:33:12',0),('anwb campinggids','q2iCHEtbGBNeQKrWrn6gBX6+b+z4QlTQ74/SItn2Azs=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','lL+0dq5Yqvx2jLngwKj8iOoI6AzSpGsdYpj538YjZk8=','2013-07-11 12:32:57',0),('apple iphone13 ios','CMz6KHuOIq/DWNP+qWmws+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','SLSTmX06ojXkm7tB6K7OlOoI6AzSpGsdYpj538YjZk8=','2021-11-23 11:18:34',0),('apple itunes store','khnQzqsQwBzgz1srEmm5DuoI6AzSpGsdYpj538YjZk8=','qLyXusgHnGLaSAXRyU2dOe6DfJOHbTwM4MySQoEZitE=','qRiHrI7OfSUVO9myJ/X8t+oI6AzSpGsdYpj538YjZk8=','2006-03-18 20:29:55',0),('apple itunes store','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','qLyXusgHnGLaSAXRyU2dOe6DfJOHbTwM4MySQoEZitE=','qRiHrI7OfSUVO9myJ/X8t+oI6AzSpGsdYpj538YjZk8=','2010-03-18 21:03:42',0),('apple itunes store','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','qLyXusgHnGLaSAXRyU2dOe6DfJOHbTwM4MySQoEZitE=','UpPsbxLGFr7QytjJvRrBxOoI6AzSpGsdYpj538YjZk8=','2020-08-14 08:37:37',0),('apple store','D4ZJiuzlNuf5QaQ0tEIpeuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','XF+elbWxwRtPz4CNSRm6FeoI6AzSpGsdYpj538YjZk8=','2010-03-18 21:06:08',0),('apress.com','IDGRD4iIAjZQV0S8XMNcMZSjeDeygTEU/pRTYY76NfU=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','CXZ2WOgAC+xM3xScj0YFQuoI6AzSpGsdYpj538YjZk8=','2007-03-18 20:35:10',0),('auth.netatmo.com/en-gb/access/login','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Z48Q7RTRrd/IUhfiBpJe1uoI6AzSpGsdYpj538YjZk8=','2020-10-06 20:43:47',0),('auth.netatmo.com/en-gb/access/login','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6URhRApnyxNbv0l5bMKG7eoI6AzSpGsdYpj538YjZk8=','2020-10-27 18:44:50',0),('beatit','WBLE5D6r7z0kqwUN8ZIKv5qAo7ndRu8d7mGjXtco71I=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','2002-03-17 16:26:13',0),('belastingdienst','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','qE7Q6XTZveBtn0GfN8gr7OoI6AzSpGsdYpj538YjZk8=','2003-03-17 16:29:06',0),('belastingdienst','pylrhbA1Car25ttxNh2siOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','dDAQlHPGUWK6JYMSETkY+OoI6AzSpGsdYpj538YjZk8=','2003-03-17 16:29:23',0),('belsimpel.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','DW45fEWBXkQRoYoEzuO8juoI6AzSpGsdYpj538YjZk8=','2022-01-19 07:51:05',0),('binck','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','9Mh6d5bLZlVCm9p4DIXchbCW7cYuxsFEFMEgExCACn4=','2007-03-18 20:37:35',0),('binck','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','loYucK9pDdd0z2VXlDKryf80XVv2cVHnTWmwbg3r3iQ=','2008-03-18 20:42:22',0),('binck','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','aB/E9ub0m/JDqkzziBTgD2gbueQ3+H1KPA4X56HxFPM=','2009-03-18 20:45:00',0),('binck','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','loYucK9pDdd0z2VXlDKrySB9JMcY+DiMUmuT5jRox4U=','2010-03-18 21:02:26',0),('binck','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','X7BxEz5a0FP3cLcf73iNXh851dKPA6pjYDyVps+5WeY=','2011-03-18 21:08:19',0),('binck','JVSVWRiQmA6ZFKl4dRXLueoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','BxcNoxhCXJzpJWOIMII02+oI6AzSpGsdYpj538YjZk8=','2019-10-01 06:26:30',0),('binck','JVSVWRiQmA6ZFKl4dRXLueoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','9RUjolOE0wJwzwZM3cYg6+oI6AzSpGsdYpj538YjZk8=','2020-08-24 17:56:54',0),('bluestars calendar / gmail','PGU0VTFKfKu6fzAxSYvcmz6Np5LbbMvv5rgAreSoeq4=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','tl5B5S/GiOzm+KQljv3QMuoI6AzSpGsdYpj538YjZk8=','2011-03-18 21:09:32',0),('bol.com','2zL0y8QDzSIBfts2t1O3MeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','b3Gph1jeQ1OvL0PqohiQH+oI6AzSpGsdYpj538YjZk8=','2003-03-17 16:34:12',0),('bol.com','0pBvZl+rYSnulXW5SIrjnZSjeDeygTEU/pRTYY76NfU=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','9ic/ODYFqearUJ1BR1XYJ+oI6AzSpGsdYpj538YjZk8=','2009-03-18 20:48:03',0),('bol.com','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','rJvP3wGp0TmD4rU2mkJ7JuoI6AzSpGsdYpj538YjZk8=','2019-04-07 15:36:26',0),('borland delphi','BRHOl2BLKKFFkqwyW1G5tMADfiYXBqs7kyj5o339EXM=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','rxpoP+stkDdBkOxURCBbHuoI6AzSpGsdYpj538YjZk8=','2002-03-17 16:25:29',0),('borland download','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','LP3vvjWAafvLITor8K0OGT80vHo126hT4UPRshreq3s=','zJjnGwjNeOO/m1o6cwQtyuoI6AzSpGsdYpj538YjZk8=','2002-03-17 16:25:00',0),('borland jbuilder','xVWgvQZelICC/bYi6ZONsjFwqYWaCcPLgVdtrtKrXDI=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','BGlGgJGYGKTAWo229wkHYeoI6AzSpGsdYpj538YjZk8=','2002-03-17 16:25:52',0),('boxershortswinkel.nl','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','+ebpscMfHVVOXCU2lgH0++oI6AzSpGsdYpj538YjZk8=','2012-03-18 21:17:27',0),('cacti mysql','B8dVAy7qBj074wRMG4QGUuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','B8dVAy7qBj074wRMG4QGUuoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:04:55',0),('cacti web','Jb2qK0gerpkXsledefBJ3OoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','66bD/PkWFc8FERid1xQGnuoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:05:14',0),('cc securecode abnamro card','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','O7hltuGfDRBLgzjWXiPiI+oI6AzSpGsdYpj538YjZk8=','ky3hGeqSL8Qz/vqvly01/uoI6AzSpGsdYpj538YjZk8=','2009-03-18 20:47:51',0),('chatgpt','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','doYnwfxMZ4j4qSyRnKLnqOoI6AzSpGsdYpj538YjZk8=','2023-06-07 12:24:34',0),('chello','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','iu3DbEf6kKlTvPWvpHoHouoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:02:26',0),('cinema.nl vpro','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','4XuC43TSbNqV25rvoRAX1+oI6AzSpGsdYpj538YjZk8=','2013-11-30 12:15:04',0),('conrad','pp2a85h+DbxcF1Sn0ugJIJSjeDeygTEU/pRTYY76NfU=','6K4u5TvVLwWHM9i55vO5S7gHwU/0kyKtSChW0rpcHF4=','66bD/PkWFc8FERid1xQGnuoI6AzSpGsdYpj538YjZk8=','2010-03-18 21:06:34',0),('coolblue','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','BceJQiBT/VE3K5bMxxwz2OoI6AzSpGsdYpj538YjZk8=','2021-04-24 10:22:24',0),('Creditcard AMRO','QCfNPPkT2gzTIBi/UjJ8HPu7x9XlsTRc8g16hvRRAZk=','T2Rlxtakr4/R4iXz1p+n2yBSqrmNlhyGCT1qjuaFs9U=','XwgBOt8qP4BZgvAZsa25xOoI6AzSpGsdYpj538YjZk8=','2009-03-18 20:48:48',0),('Creditcard AMRO','ySd74ZI0byPUyvqiiHSEDR1K0BCgIubO71Nssb/ZnSU=','ekqwpgCTZMwzzaOh5PXyOCBSqrmNlhyGCT1qjuaFs9U=','1I6Xm6N5rqfaWyK3Pmr8nOCHzr/FgnlijRPty3Olo+0=','2012-03-18 21:14:26',0),('Creditcard AMRO','ySd74ZI0byPUyvqiiHSEDR1K0BCgIubO71Nssb/ZnSU=','qqMofFr5In4p6NHw9/IZwSBSqrmNlhyGCT1qjuaFs9U=','Dx/EXPG/NQbVYFaaIZFlz+oI6AzSpGsdYpj538YjZk8=','2017-05-06 20:24:32',0),('Creditcard AMRO','ySd74ZI0byPUyvqiiHSEDR1K0BCgIubO71Nssb/ZnSU=','CIYdGGmUaiIdBIQolGkcSCBSqrmNlhyGCT1qjuaFs9U=','1REJ51T8yrDBiiMai4JCkOoI6AzSpGsdYpj538YjZk8=','2021-01-12 12:23:21',0),('Creditcard AMRO','ySd74ZI0byPUyvqiiHSEDR1K0BCgIubO71Nssb/ZnSU=','CIYdGGmUaiIdBIQolGkcSCBSqrmNlhyGCT1qjuaFs9U=','MbYlDN00xIkR5LO4eFURcOoI6AzSpGsdYpj538YjZk8=','2022-03-10 13:05:08',0),('dell xps','lkAjK6fDY14wSalEZmV/1OoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','krZ5KDO1sI4NxM9vTH3UAuoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:12:33',0),('Developer express','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','WBLE5D6r7z0kqwUN8ZIKv5qAo7ndRu8d7mGjXtco71I=','2002-03-17 16:26:53',0),('Dezign registration code','P7GOAEO5vCVkaNBLoqaBoeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','rZfSuEJ0hjEPJzmt4JvpR+oI6AzSpGsdYpj538YjZk8=','2002-03-17 16:24:07',0),('digid','0kb8vP7wzxErOYmAdbxCzuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','gcpOivuz/neY9SlcsMmRqOoI6AzSpGsdYpj538YjZk8=','2021-11-10 13:50:26',0),('DigId ignace','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','evQiAXha/fmb4DZxJuEYleoI6AzSpGsdYpj538YjZk8=','2005-03-18 20:24:33',0),('Digid ignace','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','13F7NPE9aXWJWRf5WcptDeoI6AzSpGsdYpj538YjZk8=','2014-05-30 06:42:22',0),('Download.com','LP3vvjWAafvLITor8K0OGT80vHo126hT4UPRshreq3s=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','fAjZBrhVEbTte6jEdEsyQuoI6AzSpGsdYpj538YjZk8=','2003-03-17 16:31:37',0),('dropbox','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','JjYGtf57FAxNBYh1hP+PeeoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:15:57',0),('essent','XpSbRqXae40tgCGD5Wwe4uoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','UZ1KKLQin1vneMTgYg8JKOoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:19:09',0),('essent','+s2t4lDO7bS2qMt8mB16MOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','RyOdgUvUzegM+dVTaANo/Q3QaVFmfYQVgP3f9Zl7FME=','2012-03-18 21:19:27',0),('essent','+s2t4lDO7bS2qMt8mB16MOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','aDg+7jSUXOq3KNbzbO5HRrr6XIRYAEq+8cnYzOxCZ4s=','2012-03-18 21:19:40',0),('evernote','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','vnCs+aUi+d2e0FqXuYxRNeoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:16:11',0),('evernote','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','+68QemIosFbsRGy1ZOg9Z+oI6AzSpGsdYpj538YjZk8=','2013-03-18 21:23:25',0),('familienet.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','v2nP8lCSr6GjxUuFyJIID+oI6AzSpGsdYpj538YjZk8=','2021-07-12 15:07:44',0),('firefox.com','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','WVKwR5S71Nn0JPHjG5wFCOoI6AzSpGsdYpj538YjZk8=','2021-11-26 14:03:48',0),('flex.suy','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','GSWc5Indc0i+OCd+vrBCW+oI6AzSpGsdYpj538YjZk8=','2015-11-29 11:27:11',1),('flex.tv','VJKgebV+A/sjO7SkdguH+uoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','GSWc5Indc0i+OCd+vrBCW+oI6AzSpGsdYpj538YjZk8=','2015-11-07 11:46:07',0),('foka.nl','khnQzqsQwBzgz1srEmm5DuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','gE9wK3tb16R/1GioikYy2OoI6AzSpGsdYpj538YjZk8=','2007-03-18 20:34:38',0),('fring','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','gE9wK3tb16R/1GioikYy2OoI6AzSpGsdYpj538YjZk8=','2009-03-18 20:45:18',0),('Funambol','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','cf+mQczgESP3JAQamcw/9eoI6AzSpGsdYpj538YjZk8=','2008-03-18 20:39:37',0),('futura','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jHUnfbb5/yF54NfjcrazpuoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:02:39',0),('gallery admin','Jb2qK0gerpkXsledefBJ3OoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','84+JSiIEoCjtWyZLEo/JIuoI6AzSpGsdYpj538YjZk8=','2005-03-18 20:20:55',0),('gallery db','Qp+/EW5Uw6bi2HisGuq+lOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Qp+/EW5Uw6bi2HisGuq+lOoI6AzSpGsdYpj538YjZk8=','2005-03-18 20:20:40',0),('garmin venu','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','pGnj7zmho6UuAyAP42f7GeoI6AzSpGsdYpj538YjZk8=','2020-02-11 14:39:08',0),('geheugen.com','vE2iZ9Anh5QCm57JbFxIy5SjeDeygTEU/pRTYY76NfU=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','ajjWvn8rWbWPqQI7Uncx0OoI6AzSpGsdYpj538YjZk8=','2010-03-18 21:02:14',0),('git','LWS++snh5PW857RQGhAQNOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','+2QQGLN8IxO2xufx7zWL6+oI6AzSpGsdYpj538YjZk8=','2012-03-18 21:20:19',0),('gmail','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','84+JSiIEoCjtWyZLEo/JIuoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:05:40',0),('gmail','ysnRlIbnl1f2I2hzjLV6mELbyZO7R5N4BoDE9Mn3MYs=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','grJn07WcjIk3WTlxIW6rDOoI6AzSpGsdYpj538YjZk8=','2008-03-18 20:40:28',0),('gmail','eTjetZIo0z4YgPM7ODtnHFCP9cvtrA0P2OThu+4r8Eo=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','X/BUEjLGJSdk73Xot2/ReOoI6AzSpGsdYpj538YjZk8=','2009-03-18 20:47:13',0),('gmail','ve2IeiHWASzSjqECaGhDNYLzuaZmFZaozGP67+xgoi0=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','/z7B6o3vG2jRLLiOJ1FkwuoI6AzSpGsdYpj538YjZk8=','2009-03-18 20:49:02',0),('Gmail','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','wNhXoDLZhFWZlp5JkwYEROoI6AzSpGsdYpj538YjZk8=','2019-12-29 22:17:30',0),('Gmail','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','7ph/q14unhazzOIeRqhlKOoI6AzSpGsdYpj538YjZk8=','2021-11-23 09:44:34',0),('gmail.com','1oUvP07QGKtB+NPqoaZLMFCP9cvtrA0P2OThu+4r8Eo=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','GQGqTVPpq1xCLDCq7rbfg+oI6AzSpGsdYpj538YjZk8=','2017-05-15 20:06:03',0),('gmail.com','wqtziSfBRNq9vshE9r4wjXgBLf+zuinne2cT/0qzwKE=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','OIGNQNto+zFIRKrtqhMcPuoI6AzSpGsdYpj538YjZk8=','2018-09-26 07:18:19',0),('gmail.com','VW7V+s5o5m2sydmuDn1g/OoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','ECm+wOWB0SxajKUgBNSqjeoI6AzSpGsdYpj538YjZk8=','2020-12-14 16:59:43',0),('GooSync','deXjvYEd00ReKxLDK14748kjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','84+JSiIEoCjtWyZLEo/JIuoI6AzSpGsdYpj538YjZk8=','2006-03-18 20:27:11',0),('GooSync','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','CyRV8wASi9eICEQII+tCZeoI6AzSpGsdYpj538YjZk8=','2006-03-18 20:27:27',0),('grandvision ing cc','izzc5GjzNtUj1u/dePGJmWIuQ1018C1PWRYCPbHJl0I=','mDYWDBa8hNiduE1kjHhrzOoI6AzSpGsdYpj538YjZk8=','EVrW5FkP/TrNx14DxQYfIuoI6AzSpGsdYpj538YjZk8=','2017-06-12 08:21:12',0),('grandvision ing cc','izzc5GjzNtUj1u/dePGJmWIuQ1018C1PWRYCPbHJl0I=','mDYWDBa8hNiduE1kjHhrzOoI6AzSpGsdYpj538YjZk8=','29PfeIe86GKB4W2+Tl0w3OoI6AzSpGsdYpj538YjZk8=','2022-03-25 17:10:06',0),('HardwareTotaal','kn6q1EIO4BkBzT7NRvGbmGgZBjZ9fR21xhTZkHqsyNU=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','L3cF7A98ZW5b9n6Pmft9weoI6AzSpGsdYpj538YjZk8=','2005-03-17 18:13:05',0),('HardwareTotaal','kn6q1EIO4BkBzT7NRvGbmGgZBjZ9fR21xhTZkHqsyNU=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','L3cF7A98ZW5b9n6Pmft9weoI6AzSpGsdYpj538YjZk8=','2005-03-18 20:19:56',0),('hema','d45dNvtmy6JiXuY+YtiZeNgeNw+cEuX5d0yz7Nky3aY=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','4zAbH7+U4bOwsy/5rhqcKuoI6AzSpGsdYpj538YjZk8=','2003-03-17 16:30:50',0),('hema','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','mPqTTPYExSCKEOxgw99BjuoI6AzSpGsdYpj538YjZk8=','2023-03-21 21:45:41',0),('herensokken.nl','khnQzqsQwBzgz1srEmm5DuoI6AzSpGsdYpj538YjZk8=','XGxNAX/RZiRrZ5QGTYa93+oI6AzSpGsdYpj538YjZk8=','l7KP90iXQPVmAZjIoGSA6OoI6AzSpGsdYpj538YjZk8=','2007-03-18 20:35:36',0),('home - gastenwifi','J3hqNSf87jMtCepqLKsB8eoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','fg+mTQ7YkytcTG56U8NFMeoI6AzSpGsdYpj538YjZk8=','2019-04-07 06:07:04',0),('home - wifi','x4FJ+uHj/qM/VaOjL2xvR+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','3aKmgEIQjPKTafxkh+VZheoI6AzSpGsdYpj538YjZk8=','2019-04-04 07:27:46',0),('home - wifi','J3hqNSf87jMtCepqLKsB8eoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','fg+mTQ7YkytcTG56U8NFMeoI6AzSpGsdYpj538YjZk8=','2019-04-04 07:28:26',0),('home - wifi','Jb2qK0gerpkXsledefBJ3OoI6AzSpGsdYpj538YjZk8=','P7ZoSAmANhqVh0eu2MDqquoI6AzSpGsdYpj538YjZk8=','0yYSDdOwL5jUdDJlIW5KNeoI6AzSpGsdYpj538YjZk8=','2019-04-04 07:29:03',0),('htc','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','l7KP90iXQPVmAZjIoGSA6OoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:15:43',0),('http://bluestarsbasketbal.nl/wp-admin/','dL/0THA+EYEXsUHcmPwp5RrGrrt1F2bmuH25vPeBOTU=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','tUXi9AG26yrv7iqnRQm8ouoI6AzSpGsdYpj538YjZk8=','2017-09-10 06:01:06',0),('http://en.voyages-sncf.com/en/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','ExVlj04LHkFAANHoSMa0duoI6AzSpGsdYpj538YjZk8=','2016-10-11 18:15:55',0),('http://mail/postfixadmin/login.php','RJ8+NSyUqFsjzmw789Lyc5SjeDeygTEU/pRTYY76NfU=','oRBVAW9FGqdVIFPhvZMiAeoI6AzSpGsdYpj538YjZk8=','zbFvaSG+a8qz0IYWyknHy+oI6AzSpGsdYpj538YjZk8=','2017-05-15 19:57:39',0),('http://mail/postfixadmin/login.php','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','oRBVAW9FGqdVIFPhvZMiAeoI6AzSpGsdYpj538YjZk8=','zbFvaSG+a8qz0IYWyknHy+oI6AzSpGsdYpj538YjZk8=','2017-05-15 19:58:25',0),('http://myharmony.com/','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','EL231PDj/oe2u5pJKDgwGuoI6AzSpGsdYpj538YjZk8=','2013-07-05 13:05:25',0),('http://sdg2.mastercard.com/','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','J1tSgjWw1lmraoSqgpYUhuoI6AzSpGsdYpj538YjZk8=','2014-02-07 07:36:49',0),('http://sdg2.mastercard.com/','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','51Enf+yX+ncWDyhAtBX04uoI6AzSpGsdYpj538YjZk8=','2014-05-23 11:43:56',0),('http://sdg2.mastercard.com/','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','jBlRvPyRyNfcDR1gty+T/eoI6AzSpGsdYpj538YjZk8=','2014-12-05 13:10:27',0),('http://sdg2.mastercard.com/','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','sembTFgIGyBJ/5WrKtEryOoI6AzSpGsdYpj538YjZk8=','2015-02-09 12:47:47',0),('http://sdg2.mastercard.com/','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','iAJ16KGEAeZ1lOGqYsy4oOoI6AzSpGsdYpj538YjZk8=','2015-12-11 15:35:15',0),('http://sdg2.mastercard.com/','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','TpvtJmTIdZqZd6uL1JiDpuoI6AzSpGsdYpj538YjZk8=','2017-02-13 14:14:24',0),('http://sdg2.mastercard.com/','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','XiQO9zXY+SvJEXSD0YOMzOoI6AzSpGsdYpj538YjZk8=','2017-04-25 07:42:07',0),('http://sdg2.mastercard.com/','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','x6ywkftRIG1MMD9ks0Kg8+oI6AzSpGsdYpj538YjZk8=','2017-06-29 09:49:35',0),('http://www.accessoirewinkel.nl','G7x5GnJuO7Vy9mvag3Z3x+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','0zdAIlXLDiKkGPJF0tckeOoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:17:46',0),('http://www.elgato.com/en/eyetv/eyetv-3/support/upd','+NFRTK3PKmItK53afPy3TeoI6AzSpGsdYpj538YjZk8=','cMF0Ji317hja0qgYXv7HpeoI6AzSpGsdYpj538YjZk8=','LpoLI5NRFxaC7WWXnKG5iUCxDgHx1R2peH7clwTNUJw=','2013-09-18 17:51:01',0),('http://www.eyefilm.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','vgfMmU7hsMB48qKvky4Yp+oI6AzSpGsdYpj538YjZk8=','2014-01-02 12:41:01',0),('http://www.highleytall.com/','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','knS3qQSihDbZYCvmAHnJmOoI6AzSpGsdYpj538YjZk8=','2013-04-22 19:54:49',0),('http://www.imdb.com/','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','4b3kwJOzl3C9q3NsxWJd1OoI6AzSpGsdYpj538YjZk8=','2013-09-23 09:15:32',0),('http://www.sportprijzenonline.nl','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Cg9mitCKdMiNX/SC1nt/4+oI6AzSpGsdYpj538YjZk8=','2012-03-18 21:14:42',0),('http://www.yourappontv.com','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','fACnzswAhUhZvF0HqYhDOOoI6AzSpGsdYpj538YjZk8=','2013-03-18 21:22:55',0),('https://academycampus.hybris.com','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','JoGTqkt3d3cR0OXKJDkRz+oI6AzSpGsdYpj538YjZk8=','2014-04-04 12:36:31',0),('https://adtppmemea20ws2010.accenture.com/TTVFA/','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','uuwjMnjCvuR6LJFTmQzc8eoI6AzSpGsdYpj538YjZk8=','2014-09-26 10:02:13',0),('https://appbrewery.com/courses/enrolled','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','WbtbNmrKH9GI+se2D0h4ZeoI6AzSpGsdYpj538YjZk8=','2022-10-23 13:40:07',0),('https://apps.essent.nl/households/mijnessent/index','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','4m6QioCg2gvlCm02l48gUuoI6AzSpGsdYpj538YjZk8=','2014-10-15 06:23:09',0),('https://bankieren.rabobank.nl/klanten/','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','mLq+5PpJaBzpHEWEeR2EaMeNeG1/dpljrlKPVFPz+68=','31CaPDfc3HvZO82XF7WSUeoI6AzSpGsdYpj538YjZk8=','2015-02-14 11:22:27',0),('https://clijbedi.twinq.nl','ABbAA+MeCRggShiNap9U8uoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','OLtsqpLeIEvp25y80xAZL+oI6AzSpGsdYpj538YjZk8=','2021-12-06 21:42:51',0),('https://clijbedi.twinq.nl','yDAcamKYW/RQstSqCOJ0huoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','SpWJeDDQ4XwFn97t7JaoZOoI6AzSpGsdYpj538YjZk8=','2023-07-31 13:30:23',0),('https://config.stratoserver.net/ ','ojhMaseo/Aofx77loWNag7AQygJApdxPmBDKvmeAC8s=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','fdUO00gygnutUdl+dWnGjeoI6AzSpGsdYpj538YjZk8=','2020-05-24 12:52:05',0),('https://decorrespondent.nl','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','7ph/q14unhazzOIeRqhlKOoI6AzSpGsdYpj538YjZk8=','2021-01-02 07:05:28',0),('https://denon.vtuner.com/setupapp/denon/asp/BrowseStations/StartPage.a','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','dwdWDj+H17cfKDlkQDjpzeoI6AzSpGsdYpj538YjZk8=','2020-02-21 08:27:31',0),('https://developers.meethue.com/','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','fe6blZCUguV1oTUDRBWAHOoI6AzSpGsdYpj538YjZk8=','2020-01-04 13:51:31',0),('https://dossier.greenchoice.nl/','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','fFruRrhvEYZHgqEKcPhWO+oI6AzSpGsdYpj538YjZk8=','2020-01-20 21:27:15',0),('https://dossier.greenchoice.nl/','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','C8IWeJEmrYWnlUi/wlXKUOoI6AzSpGsdYpj538YjZk8=','2022-10-08 12:59:39',0),('https://en.ardennes-etape.com','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','X3qbFFr4omOtB0rKWKQGsOoI6AzSpGsdYpj538YjZk8=','2013-04-15 17:49:33',0),('https://grandvision.talentexcellence.com/Start.asp','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jBlRvPyRyNfcDR1gty+T/eoI6AzSpGsdYpj538YjZk8=','2014-12-08 07:39:07',0),('https://grandvision.talentexcellence.com/Start.asp','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jJOg5rgonGT1CmUbZG+ECeoI6AzSpGsdYpj538YjZk8=','2020-01-29 12:07:28',0),('https://grandvision.talentexcellence.com/Start.asp','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','OLtsqpLeIEvp25y80xAZL+oI6AzSpGsdYpj538YjZk8=','2020-11-02 14:39:36',0),('https://hub.docker.com/','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','oRGjhqKYYr5zHXUuakDbQ+oI6AzSpGsdYpj538YjZk8=','2020-01-03 14:51:33',0),('https://ignace.suy.nu/books/','VrTeX+lzdGikAQgQQ2tBPeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','dpxtJpUrzlScUKYAjOOmSeoI6AzSpGsdYpj538YjZk8=','2013-11-26 21:56:13',0),('https://ignace.suy.nu/zabbix/','oRBVAW9FGqdVIFPhvZMiAeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','JYUorMlPU451F0XTVXns3eoI6AzSpGsdYpj538YjZk8=','2013-03-27 14:21:17',0),('https://ignacejanine.liveschijf.nl','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Ez4Jg7c8h2K1Qzoo2MNI+uoI6AzSpGsdYpj538YjZk8=','2013-09-17 06:47:29',0),('https://invoice.privium.nl/schiphol-privium','Gn7V3kPrJEXIsCSkorrCwOoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','1X9sctalZLAMNZ5083l6BeoI6AzSpGsdYpj538YjZk8=','2014-03-11 11:08:31',0),('https://login.youforce.biz/Aanmelden/Aanmeld.aspx?url=%2F','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','jewMjGJmPYexe5+7sxgxluoI6AzSpGsdYpj538YjZk8=','2020-01-24 07:32:16',0),('https://login.youforce.biz/Aanmelden/Aanmeld.aspx?url=/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','OLtsqpLeIEvp25y80xAZL+oI6AzSpGsdYpj538YjZk8=','2020-04-02 12:17:36',0),('https://login.youforce.biz/Aanmelden/Aanmeld.aspx?url=/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','aZv2flIqAUV5ziA6M7EiOeoI6AzSpGsdYpj538YjZk8=','2021-08-09 17:55:41',0),('https://mijnhypotheek.lloydsbank.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jewMjGJmPYexe5+7sxgxluoI6AzSpGsdYpj538YjZk8=','2019-05-18 16:41:41',0),('https://mijnportaal.abnamropensioenen.nl/#','bAPZd/kJ+gweKjTHvTAb8+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','oROHtnDUZQ2xAaMFGmYunuoI6AzSpGsdYpj538YjZk8=','2017-03-02 15:43:52',0),('https://mijnportaal.abnamropensioenen.nl/#','bAPZd/kJ+gweKjTHvTAb8+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','B6SZQjEmY4C/IMijCoYFXeoI6AzSpGsdYpj538YjZk8=','2017-12-07 10:05:50',0),('https://mijntele2.tele2.nl/','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','yTanAk3IazqCbNqgvBLvdOoI6AzSpGsdYpj538YjZk8=','2018-05-30 19:18:00',0),('https://nl.readly.com','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','FA9vy8O8cIguKHjeJacWt+oI6AzSpGsdYpj538YjZk8=','2020-05-04 07:13:32',0),('https://performancemanager.successfactors.eu/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','7hyjIrUUMKQ1laVuFeSX2OoI6AzSpGsdYpj538YjZk8=','L29o1K2H/vDZa2MAnvtXkuoI6AzSpGsdYpj538YjZk8=','2017-03-28 09:43:33',0),('https://performancemanager.successfactors.eu/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','7hyjIrUUMKQ1laVuFeSX2OoI6AzSpGsdYpj538YjZk8=','bbX+BX8gRtngFgG8k3Y9X+oI6AzSpGsdYpj538YjZk8=','2017-10-19 09:39:12',0),('https://performancemanager.successfactors.eu/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','J0Jhg2cYnVM9cqEslP3IoAPq9C24G42GNJElKL/DBJo=','RrcUxL4ilJ9aNapmsiALs+oI6AzSpGsdYpj538YjZk8=','2018-06-25 07:08:16',0),('https://performancemanager.successfactors.eu/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','J0Jhg2cYnVM9cqEslP3IoAPq9C24G42GNJElKL/DBJo=','iAJ16KGEAeZ1lOGqYsy4oOoI6AzSpGsdYpj538YjZk8=','2019-02-19 10:25:41',0),('https://performancemanager.successfactors.eu/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','J0Jhg2cYnVM9cqEslP3IoAPq9C24G42GNJElKL/DBJo=','vvS3AQmBKJ4PdKeHFzJVCeoI6AzSpGsdYpj538YjZk8=','2019-10-10 06:45:22',0),('https://performancemanager.successfactors.eu/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','J0Jhg2cYnVM9cqEslP3IoAPq9C24G42GNJElKL/DBJo=','4nb8al+yPnrcyiZUiceGNuoI6AzSpGsdYpj538YjZk8=','2020-08-13 06:17:17',0),('https://performancemanager.successfactors.eu/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','J0Jhg2cYnVM9cqEslP3IoAPq9C24G42GNJElKL/DBJo=','ambD9Et3vPCiFLzTxyQaEOoI6AzSpGsdYpj538YjZk8=','2021-02-16 06:11:14',0),('https://performancemanager.successfactors.eu/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','J0Jhg2cYnVM9cqEslP3IoAPq9C24G42GNJElKL/DBJo=','XV9/BmUevUxk3tIM9IhOhuoI6AzSpGsdYpj538YjZk8=','2021-10-08 06:58:40',0),('https://performancemanager.successfactors.eu/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','J0Jhg2cYnVM9cqEslP3IoAPq9C24G42GNJElKL/DBJo=','OL7qP9HMEDtzHxBAXjMAcuoI6AzSpGsdYpj538YjZk8=','2022-04-12 06:23:34',0),('https://performancemanager.successfactors.eu/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','J0Jhg2cYnVM9cqEslP3IoAPq9C24G42GNJElKL/DBJo=','ZxdW/sl2arBHIx3EFd2qcOoI6AzSpGsdYpj538YjZk8=','2023-06-02 08:04:27',0),('https://plex.tv','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','WOBwgb9/P17V/3cGXgc9euoI6AzSpGsdYpj538YjZk8=','2016-01-11 18:03:16',0),('https://plex.tv','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','Mm5LvTEQ5bwHWlwWucKw++oI6AzSpGsdYpj538YjZk8=','2018-01-19 17:48:51',0),('https://plex.tv','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','s/Nuz+b2KCzgFaADu/CyDeoI6AzSpGsdYpj538YjZk8=','2022-08-24 08:09:03',0),('https://plex.tv','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','fW1sciuQ22vujqLIIoctKeoI6AzSpGsdYpj538YjZk8=','2022-08-27 07:42:49',0),('https://plex.tv - janine','eTjetZIo0z4YgPM7ODtnHFCP9cvtrA0P2OThu+4r8Eo=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','sqrxas0mPqWeA/um021JtOoI6AzSpGsdYpj538YjZk8=','2018-01-19 17:54:47',0),('https://portal.srxp.com/#/login?email=ignace.suy@g','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','zXDLsHf3xxjjdC71U6EVLuoI6AzSpGsdYpj538YjZk8=','K/h5zy+05XbnbGOszykVguoI6AzSpGsdYpj538YjZk8=','2017-06-12 13:25:47',0),('https://sapcqpub1.emea.pgiconnect.com','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','OCNp/bnrD317uFAVctY2SeoI6AzSpGsdYpj538YjZk8=','2014-10-09 06:27:22',0),('https://shop-nl.concept2.com/nl/order-history','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','14UF170IuZxt9CW//w1w7+oI6AzSpGsdYpj538YjZk8=','2020-01-29 08:54:26',0),('https://shop-nl.concept2.com/nl/order-history','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','xKlT0QF/8wEMcnf6jxWL+2d3DWo7LgKJ0tzuY8couqnrtO3ywLgy4iPSj2ZvZccH6gjoDNKkax1imPnfxiNmTw==','14UF170IuZxt9CW//w1w7+oI6AzSpGsdYpj538YjZk8=','2020-02-25 20:56:28',0),('https://standby.careassist.nl/?client/#/bestanden','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','wPOqyysnYftKO6xKUPiclspYDM+dDEnklvNBP8s2po4=','2017-01-23 20:10:21',0),('https://standby.careassist.nl/?client/#/bestanden','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','h9OcdhNKhSEqZEP+q5su9uoI6AzSpGsdYpj538YjZk8=','2017-02-24 06:58:40',0),('https://support.sportlink.nl/support/home','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','U5spipbY+foWs6/jJgXIvOoI6AzSpGsdYpj538YjZk8=','2017-09-13 12:43:41',0),('https://travelguard.secure.force.com/TravelAssista','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jewMjGJmPYexe5+7sxgxluoI6AzSpGsdYpj538YjZk8=','2018-02-19 10:42:26',0),('https://verhuizen.postnl.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','+s2t4lDO7bS2qMt8mB16MOoI6AzSpGsdYpj538YjZk8=','OLtsqpLeIEvp25y80xAZL+oI6AzSpGsdYpj538YjZk8=','2021-07-02 10:32:37',0),('https://webmail.grandvision.com/owa/auth/logon.asp','mjXh1+StqQ27GYXx0k7PDuoI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','owIZkS69YSRn14fJd3iTFeoI6AzSpGsdYpj538YjZk8=','2013-11-25 08:19:43',0),('https://websmp102.sap-ag.de','jgpely4E4NilS1heioHuCeoI6AzSpGsdYpj538YjZk8=','Z6Vki2lw86bZ1s5XSu1OXsAHH9hCgJrcCPUM/AP6+Bk=','cGP3lmlPs/NyrBqEIT5FWOoI6AzSpGsdYpj538YjZk8=','2014-02-03 10:00:19',0),('https://websmp102.sap-ag.de','jgpely4E4NilS1heioHuCeoI6AzSpGsdYpj538YjZk8=','Z6Vki2lw86bZ1s5XSu1OXsAHH9hCgJrcCPUM/AP6+Bk=','efhmX85LuiNlDzVcnmuZdOoI6AzSpGsdYpj538YjZk8=','2019-10-17 14:51:43',0),('https://werknemer.loket.nl/','L/8XD6EuVsWnWs7GSBvEe+oI6AzSpGsdYpj538YjZk8=','cUlWjKeketnZ0Rs3KP9LIOoI6AzSpGsdYpj538YjZk8=','g6CDu2z8Ezp2mYGVghMcGeoI6AzSpGsdYpj538YjZk8=','2020-08-23 11:46:19',0),('https://www.aegon.nl/particulier/klantenservice/mi','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','hzGiXL6ch/+X0RZsnsskZOoI6AzSpGsdYpj538YjZk8=','2014-08-10 08:18:44',0),('https://www.aegon.nl/particulier/klantenservice/mi','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','LHi1W4q0m/lLULu6Unhx3uoI6AzSpGsdYpj538YjZk8=','2021-08-09 18:12:15',0),('https://www.albelli.nl/','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','7r/4V8GRYKk+QBK+W53h0eoI6AzSpGsdYpj538YjZk8=','2020-06-22 11:14:57',0),('https://www.all4spas.eu','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','GJ8CTqgk918HY5fi2wY7qeoI6AzSpGsdYpj538YjZk8=','2020-08-31 10:10:43',0),('https://www.anwb.nl/mijn-anwb/mijn-gegevens','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','hzGiXL6ch/+X0RZsnsskZOoI6AzSpGsdYpj538YjZk8=','2016-06-27 18:36:13',0),('https://www.beaumotica.nl/','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','XpoNw7FM5gUltRj7s2sevOoI6AzSpGsdYpj538YjZk8=','2021-09-26 11:12:19',0),('https://www.bel-me-niet.nl/user','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','GqRkE4SGAvydqRZM+QHC+eoI6AzSpGsdYpj538YjZk8=','2013-11-16 14:59:42',0),('https://www.carenzorgt.nl/landing/#welcome/login','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','chRVXa6e/XBYMI3BXZNOieoI6AzSpGsdYpj538YjZk8=','2020-09-30 15:23:01',0),('https://www.cerberusapp.com','CtjxplxTdNSCbx2H1B96Q+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','66bD/PkWFc8FERid1xQGnuoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:17:13',0),('https://www.ekoplaza.nl/','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','mdcplkmzdF0/wB+0Yc8MdOoI6AzSpGsdYpj538YjZk8=','2018-12-09 12:12:46',0),('https://www.europcar.co.uk','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','mJosJzrROZ6bpOakaN7meOoI6AzSpGsdYpj538YjZk8=','2014-09-19 08:44:38',0),('https://www.facebook.com/ignace.suy','M3kpe+WnCi17OT8bYqRXykXEm9SAWHOb8WSgRPiPt2hoGQY2fX0dtcYU2ZB6rMjV6gjoDNKkax1imPnfxiNmTw==','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','hFzuDBgXgxHnXpHhMZ7uyOoI6AzSpGsdYpj538YjZk8=','2013-09-23 08:53:20',0),('https://www.homeaway.com/traveler/th/inbox','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','X4EvUGUuKioumjPM9LChGuoI6AzSpGsdYpj538YjZk8=','2020-06-24 06:26:39',0),('https://www.icscards.nl/abnamro','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','P5/DZT68GWcSS8xtL0K2n+oI6AzSpGsdYpj538YjZk8=','2020-12-30 18:23:18',0),('https://www.icscards.nl/abnamro/mijn','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','ZLL6mXZgIGR56rCz86u7ruoI6AzSpGsdYpj538YjZk8=','2015-11-07 21:10:31',0),('https://www.iffr.com/nl/','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','qnXN6p0RkELjk8qA5nqCaeoI6AzSpGsdYpj538YjZk8=','2015-01-11 12:35:32',0),('https://www.iffr.com/nl/','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','rrT7yVYqQk6LqRD7LqWAxOoI6AzSpGsdYpj538YjZk8=','2022-12-25 08:23:38',0),('https://www.independer.nl/mijnindepender/inloggen','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','OLtsqpLeIEvp25y80xAZL+oI6AzSpGsdYpj538YjZk8=','2018-12-31 10:11:40',0),('https://www.independer.nl/mijnindepender/inloggen','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','isnHRcvVsQQTf2IDD+Fa8OoI6AzSpGsdYpj538YjZk8=','2021-06-19 17:58:22',0),('https://www.ingcommercialcard.com','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','nu6SzsTwFikhNDh+6knu3OoI6AzSpGsdYpj538YjZk8=','2018-11-19 07:45:30',0),('https://www.ingcorporatecardonline.com/Centre/Home','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','zXDLsHf3xxjjdC71U6EVLuoI6AzSpGsdYpj538YjZk8=','K/h5zy+05XbnbGOszykVguoI6AzSpGsdYpj538YjZk8=','2017-06-12 11:11:15',0),('https://www.instagram.com/','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Pg28Pp4QnG0rKr8Bmki1l+oI6AzSpGsdYpj538YjZk8=','2018-12-16 07:48:02',0),('https://www.marketonweb.nl/','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','8Ny6DpTLrIPddDJyMhkQ4+oI6AzSpGsdYpj538YjZk8=','2020-07-23 10:14:23',0),('https://www.mijnsn.nl - schouten nelissen','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Q4JjF38X6VoYE581ZcrzUuoI6AzSpGsdYpj538YjZk8=','2016-03-24 12:37:08',0),('https://www.ns.nl/mijnns#/dashboard','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','8k9MRqPQUxK2SLLu9KHjb+oI6AzSpGsdYpj538YjZk8=','2018-12-15 13:03:01',0),('https://www.ov-chipkaart.nl/','VJKgebV+A/sjO7SkdguH+uoI6AzSpGsdYpj538YjZk8=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','TmEz3+t38Y4QSuY6M+aFu+oI6AzSpGsdYpj538YjZk8=','2014-04-14 07:06:43',0),('https://www.ov-chipkaart.nl/','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','yRxVRbPUR9DekQqxBLVxQeoI6AzSpGsdYpj538YjZk8=','2015-01-30 21:40:01',0),('https://www.perfectewijn.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','uQru37KImZ+RQFihhsU1DOoI6AzSpGsdYpj538YjZk8=','2016-08-07 09:28:18',0),('https://www.shopping2020.nl','zXDLsHf3xxjjdC71U6EVLuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','HHLZ2IdZCgWeBVWvzHSF4+oI6AzSpGsdYpj538YjZk8=','2014-06-10 09:59:51',0),('https://www.spitsmijdengalecopperbrug.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','8FY6K45wbvHqCrjCKTY9KeoI6AzSpGsdYpj538YjZk8=','2014-09-01 06:30:12',0),('https://www.spitsmijdengalecopperbrug.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','k5J+0GMC57xpKf2h0wXJqOoI6AzSpGsdYpj538YjZk8=','2015-03-30 06:19:46',0),('https://www.suy.nu/blog','bAPZd/kJ+gweKjTHvTAb8+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jGqpv+9wJ32bFalfeVL/WeoI6AzSpGsdYpj538YjZk8=','2010-03-18 21:05:37',0),('https://www.suy.nu/bup/requestCode','pjYm+oFv7SVx0S/PGZZGXqZu3AooC5Vmko5fbtuXPW0=','aiCN13FnibokswpnqnzDRuoI6AzSpGsdYpj538YjZk8=','G97nAZmazzj7grUFUxLYqOoI6AzSpGsdYpj538YjZk8=','2017-08-12 11:31:24',0),('https://www.suy.nu/cloud','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','bvZM1Ck1x9wcFBO5DV+DZuoI6AzSpGsdYpj538YjZk8=','2018-06-28 20:24:46',0),('https://www.suy.nu/cloud','TWcO2QAFtA3NE8IJIMhnkOjLyMWUOt77Hxv8ax4gf/U=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','cf+mQczgESP3JAQamcw/9eoI6AzSpGsdYpj538YjZk8=','2020-02-22 14:57:43',0),('https://www.suy.nu/code','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','iEsCp5iIbQzyT1jeuQFlxOoI6AzSpGsdYpj538YjZk8=','84+JSiIEoCjtWyZLEo/JIuoI6AzSpGsdYpj538YjZk8=','2019-01-04 10:13:16',0),('https://www.suy.nu/code','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','iEsCp5iIbQzyT1jeuQFlxOoI6AzSpGsdYpj538YjZk8=','VHfaCA14Ey0Hsmf4WKG3+eoI6AzSpGsdYpj538YjZk8=','2019-08-03 15:34:18',0),('https://www.suy.nu/code','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','54g377j2OWRt1/BJZJdjgeoI6AzSpGsdYpj538YjZk8=','cf+mQczgESP3JAQamcw/9eoI6AzSpGsdYpj538YjZk8=','2020-02-23 14:01:26',0),('https://www.suy.nu/tiki','6Ycf2VfAEeseh77vtnzlWuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','JY7V1rHzMO0eYn7nixpqP+oI6AzSpGsdYpj538YjZk8=','2010-03-18 21:05:52',0),('https://www.suy.nu/tiki/backup-media-on-encrypted-usb-drive.html','frXjxmG88p+EQiCsDyxoD+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','AzrqoiHH1ILuJ6Zb+OIWY+oI6AzSpGsdYpj538YjZk8=','2021-02-09 22:31:32',0),('https://www.t-mobile.nl/login','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','mZ1eJJFNPhUcyXywz+a/D+oI6AzSpGsdYpj538YjZk8=','2017-06-25 19:50:11',0),('https://www.t-mobile.nl/login','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','fzOMw0r/C0ssw+5ei06tceoI6AzSpGsdYpj538YjZk8=','2021-11-23 16:33:32',0),('https://www.talentindex.eu/grandvision','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jJOg5rgonGT1CmUbZG+ECeoI6AzSpGsdYpj538YjZk8=','2020-01-30 08:22:39',0),('https://www.talentindex.eu/grandvision','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','vVjdDaWAIWTIpw+e6kpzNOoI6AzSpGsdYpj538YjZk8=','2020-11-02 14:40:01',0),('https://www.ticketmaster.nl/myAccount/editProfile','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','8jpSqyNzD54LFjSh5sii1eoI6AzSpGsdYpj538YjZk8=','2017-02-11 10:45:35',0),('https://www.ticketmaster.nl/myAccount/editProfile','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jrlvmGEnXXcm1YJurOcmQ+oI6AzSpGsdYpj538YjZk8=','2020-02-13 08:11:48',0),('https://www.toppy.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','TyrDfpE2u0xxy0wLPA23vuoI6AzSpGsdYpj538YjZk8=','2019-06-11 08:33:34',0),('https://www.travelodge.co.uk/my_travelodge/','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','fo7Uyt3dMsg/LgW7TBMqjOoI6AzSpGsdYpj538YjZk8=','2013-04-12 11:21:24',0),('https://www.udemy.com/sap-mm-training/learn/v4/overview','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','pffucy8Vfv0HeoPQureCeeoI6AzSpGsdYpj538YjZk8=','2018-11-23 09:53:04',0),('https://www.ups.com/WebTracking','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','gcpOivuz/neY9SlcsMmRqOoI6AzSpGsdYpj538YjZk8=','2019-08-21 14:21:25',0),('https://www.werknemerloket.nl/','L/8XD6EuVsWnWs7GSBvEe+oI6AzSpGsdYpj538YjZk8=','cUlWjKeketnZ0Rs3KP9LIOoI6AzSpGsdYpj538YjZk8=','g6CDu2z8Ezp2mYGVghMcGeoI6AzSpGsdYpj538YjZk8=','2016-09-27 12:20:12',0),('https://www.zwembadgigant.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','EHYE4r3N8E2Q7fcMcQfpJeoI6AzSpGsdYpj538YjZk8=','2021-02-20 14:31:37',0),('https://www9.pearsonvue.com/testtaker','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','GXaLBRCnmREbdrlGjEXrT3ipSuR+cSp+iUJw1XcWCwQ=','8sZSr9wMjRG4U1VRUsKifuoI6AzSpGsdYpj538YjZk8=','2017-03-21 10:23:31',0),('hyves','2T4r9IBz9+NVVptlYDny5OoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','T9RCyXJ898rO/eOJBIN5G+oI6AzSpGsdYpj538YjZk8=','2008-03-18 20:43:19',0),('i3','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','lKL1cO40y8yc9CYQlPQwrOoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:06:58',0),('Ibazar','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','cAI6pKIGxsGwrcfm00lBLegEWgGDoMsg6KVdkxnzbzg=','UNoYaU8LWJzDl1A7DeMDJOoI6AzSpGsdYpj538YjZk8=','2002-03-17 16:24:27',0),('ICQ','utMHTyxmw1IgEHGl1dF3IeoI6AzSpGsdYpj538YjZk8=','PUPq3magdsRgLGgpcdQOqeoI6AzSpGsdYpj538YjZk8=','UNoYaU8LWJzDl1A7DeMDJOoI6AzSpGsdYpj538YjZk8=','2002-03-17 16:20:22',0),('ics amro','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','sVHgf1lARW8c1laXeOE8vOoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:13:51',0),('ics.nl','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','5/J6uleg/9FBU8pPSh8gwuoI6AzSpGsdYpj538YjZk8=','vlqj32IABBeaUpQ42nGw4uoI6AzSpGsdYpj538YjZk8=','2013-04-12 11:22:00',0),('ignace.boxee','TB9uX4prGKw4l9us29LmgiR0CtVR8+8GFrXEe3KbVqA=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jGqpv+9wJ32bFalfeVL/WeoI6AzSpGsdYpj538YjZk8=','2011-03-18 21:09:05',0),('informit.com','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','eUGTB6iux8AcfZKMHCXRZ+oI6AzSpGsdYpj538YjZk8=','2010-03-18 21:06:52',0),('Informix help','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','h+dDO80ieeBAYErs5tsAGuoI6AzSpGsdYpj538YjZk8=','2001-03-17 16:11:32',0),('ing for gv','RH/x+wgBhbRKMZsq/3He4ksu9CqcjT9FrAXR1BzNZ8A=','WbdO1PP48k/4t+a3fjxY1OoI6AzSpGsdYpj538YjZk8=','bzMmNJG7mVJCbosxY1dkrOoI6AzSpGsdYpj538YjZk8=','2014-10-16 08:20:55',0),('ing met ignace','L3n6IhyUOcVS3ygMBcwqjOoI6AzSpGsdYpj538YjZk8=','vgOCbeFSPIWh1Ea+EDkiXnA77WW4kHUOmitXPVXEWqU=','yzr5+ZieNWByuekAdH1ImOoI6AzSpGsdYpj538YjZk8=','2023-01-04 20:26:24',0),('ing met katja','L3n6IhyUOcVS3ygMBcwqjOoI6AzSpGsdYpj538YjZk8=','vgOCbeFSPIWh1Ea+EDkiXnA77WW4kHUOmitXPVXEWqU=','x9KI6orfELAHPAj0tRhFZ+oI6AzSpGsdYpj538YjZk8=','2018-10-11 12:30:24',0),('ing met katja','L3n6IhyUOcVS3ygMBcwqjOoI6AzSpGsdYpj538YjZk8=','vgOCbeFSPIWh1Ea+EDkiXnA77WW4kHUOmitXPVXEWqU=','rgHf+VpU5uNWHiTHtxgkGOoI6AzSpGsdYpj538YjZk8=','2018-10-11 12:33:57',0),('ing met katja','L3n6IhyUOcVS3ygMBcwqjOoI6AzSpGsdYpj538YjZk8=','vgOCbeFSPIWh1Ea+EDkiXnA77WW4kHUOmitXPVXEWqU=','c5aD+nsyEnGNsdav5zDcX77N5Ldndc5ACtuxkWH1dE8=','2020-03-22 14:11:23',0),('ing met katja','L3n6IhyUOcVS3ygMBcwqjOoI6AzSpGsdYpj538YjZk8=','vgOCbeFSPIWh1Ea+EDkiXnA77WW4kHUOmitXPVXEWqU=','a8CEOE5CupZoaR5nFliJ6ol6CT3DYVVG0Zv9aseTJX0=','2021-11-02 14:58:06',0),('ing met katja','L3n6IhyUOcVS3ygMBcwqjOoI6AzSpGsdYpj538YjZk8=','vgOCbeFSPIWh1Ea+EDkiXnA77WW4kHUOmitXPVXEWqU=','Ca+lBFsHcaUZ//orVRKqW+oI6AzSpGsdYpj538YjZk8=','2021-11-23 15:41:37',0),('ing.nl','vca8kPhzNRq0ynJC7OZ3gJx4nxCybkfceq49a4/FRoA=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','WTT4ygt+YWDzrD+8q3gf9eoI6AzSpGsdYpj538YjZk8=','2013-04-09 10:38:37',0),('ing/katja','L3n6IhyUOcVS3ygMBcwqjOoI6AzSpGsdYpj538YjZk8=','vgOCbeFSPIWh1Ea+EDkiXnA77WW4kHUOmitXPVXEWqU=','kfFlTzRTvqUT+/tKMsM4RuoI6AzSpGsdYpj538YjZk8=','2018-10-11 10:29:22',0),('ing/katja','GZpKFP0tTQNJtzdnE58/G+oI6AzSpGsdYpj538YjZk8=','vgOCbeFSPIWh1Ea+EDkiXnA77WW4kHUOmitXPVXEWqU=','TrmfWK5pt4n+KEHT+5Ai5+oI6AzSpGsdYpj538YjZk8=','2021-12-01 07:39:47',0),('itouch/iphone dev privkey','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','rt7utW3rIjEGyCUtlhjdTOoI6AzSpGsdYpj538YjZk8=','2007-03-18 20:35:59',0),('janine','XGxrL5GPEqGi7ybZ1IbFWuoI6AzSpGsdYpj538YjZk8=','AT9tvH1Vj3Y2qVGaY2uzf+oI6AzSpGsdYpj538YjZk8=','1KWHMXTNVJOBWDo13BOvjOoI6AzSpGsdYpj538YjZk8=','2016-12-28 11:12:25',1),('Janine Digid','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','/ta6LxJQj8ymmmh2hTkxkuoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:13:24',0),('Janine digid','Bf59igZ+GYJRnC4kwbBCc+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','/ta6LxJQj8ymmmh2hTkxkuoI6AzSpGsdYpj538YjZk8=','2013-03-24 15:38:36',0),('janine.de.maat@gmail.com','eTjetZIo0z4YgPM7ODtnHFCP9cvtrA0P2OThu+4r8Eo=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','X/BUEjLGJSdk73Xot2/ReOoI6AzSpGsdYpj538YjZk8=','2018-01-18 13:26:47',0),('janine.de.maat@gmail.com','eTjetZIo0z4YgPM7ODtnHFCP9cvtrA0P2OThu+4r8Eo=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','9YWk6Mk84K6HXX/6yX2tc+oI6AzSpGsdYpj538YjZk8=','2020-03-22 13:58:01',0),('janine@demaat.info','q2iCHEtbGBNeQKrWrn6gBX6+b+z4QlTQ74/SItn2Azs=','kUjxOTLDpfXyaw/k3wdDYuoI6AzSpGsdYpj538YjZk8=','Z2h+KFqYvybpzvDXuMVh5eoI6AzSpGsdYpj538YjZk8=','2017-05-23 18:54:39',0),('janine@demaat.info','q2iCHEtbGBNeQKrWrn6gBX6+b+z4QlTQ74/SItn2Azs=','fbxF5e6Cs0bsI3DZGgK5NO7wFOtP+IXrgrdfXMRE7qY=','8bZ6dr9b0KdPAaPx96R7CeoI6AzSpGsdYpj538YjZk8=','2021-03-24 17:35:40',0),('janinedigid','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','e0r8TfRvMWWUu9aaE5DKC+oI6AzSpGsdYpj538YjZk8=','2009-03-18 20:44:48',0),('janinesmac','pylrhbA1Car25ttxNh2siOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','bNDcp4AGT+5/EDzxLIKWkeoI6AzSpGsdYpj538YjZk8=','2010-03-18 21:03:21',0),('Jaws PDF Creator (English) 1.52','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','GcJpjhFkuSmHIwzFr+9QSeoI6AzSpGsdYpj538YjZk8=','2002-03-17 16:23:44',0),('katja','aMHjVFvbKIle2/kxDmTPeOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','hEyZiVajrSOEWfDgarEwCOoI6AzSpGsdYpj538YjZk8=','2010-03-18 21:04:45',0),('katja','aMHjVFvbKIle2/kxDmTPeOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','zAzBArmWamgMDm/l0pSZGuoI6AzSpGsdYpj538YjZk8=','2011-03-18 21:10:11',0),('katja','aMHjVFvbKIle2/kxDmTPeOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','sThwH/hZ0/WMwc/DNO6ATeoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:18:54',0),('katja','JWCx+ab4qa0h9GGHMULH4+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','tGWPBHvl3dMYWTwxlwV0WOoI6AzSpGsdYpj538YjZk8=','2013-10-07 17:50:36',0),('katja','aMHjVFvbKIle2/kxDmTPeOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','3g61WkzcJpVECw2Q+CkSx+oI6AzSpGsdYpj538YjZk8=','2014-10-27 18:16:54',0),('katja','aMHjVFvbKIle2/kxDmTPeOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','er6tnszxvKCEplxLB+0+tOoI6AzSpGsdYpj538YjZk8=','2016-01-11 10:42:06',0),('katja','zFUuGVDoe14p1RIVCeazCeoI6AzSpGsdYpj538YjZk8=','aMHjVFvbKIle2/kxDmTPeOoI6AzSpGsdYpj538YjZk8=','ixkbxxRjDfjOSxgI5Y8tzuoI6AzSpGsdYpj538YjZk8=','2016-10-23 18:30:38',0),('katja','zFUuGVDoe14p1RIVCeazCeoI6AzSpGsdYpj538YjZk8=','aMHjVFvbKIle2/kxDmTPeOoI6AzSpGsdYpj538YjZk8=','JffqmyPl2XNkhTWiQ0nim+oI6AzSpGsdYpj538YjZk8=','2017-11-12 21:46:12',0),('katja','zFUuGVDoe14p1RIVCeazCeoI6AzSpGsdYpj538YjZk8=','pHz6VDlhHncyzDVBZWLai+oI6AzSpGsdYpj538YjZk8=','hYKMOBIz+biHfUWgYzRM8+oI6AzSpGsdYpj538YjZk8=','2018-08-31 13:56:49',0),('katja','zFUuGVDoe14p1RIVCeazCeoI6AzSpGsdYpj538YjZk8=','pHz6VDlhHncyzDVBZWLai+oI6AzSpGsdYpj538YjZk8=','FWsU4VzYVUHLaS8s/6OB0uoI6AzSpGsdYpj538YjZk8=','2020-01-25 20:57:27',0),('katja icloud facetime','PZ3M9LFWuhcb+jjr1Um1P4Y1SBKef37jdyVngDMm5lU=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','OJi3yQxmO6la591jmLMsFuoI6AzSpGsdYpj538YjZk8=','2020-03-22 13:57:20',0),('Kayako','bAPZd/kJ+gweKjTHvTAb8+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','a+AL4z2URXnUlyD+gwuLjeoI6AzSpGsdYpj538YjZk8=','2008-03-18 20:39:51',0),('kgpg','WBLE5D6r7z0kqwUN8ZIKv5qAo7ndRu8d7mGjXtco71I=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','GtMNBaABJuxStvo/Qj9RBOoI6AzSpGsdYpj538YjZk8=','2003-03-17 16:33:35',0),('klm','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Wpt1a9a8ncx+/Cc2ZaqPReoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:12:54',0),('komoot','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','JcIleyxH2x+yEN3+4uqaEeoI6AzSpGsdYpj538YjZk8=','2021-07-19 06:36:49',0),('lastfm','Uo9sTrIhkjQtWk7ctgeE6eoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','bKo3tEqkUBhgLYaQ9dh9qOoI6AzSpGsdYpj538YjZk8=','2009-03-18 20:49:17',0),('linkedin','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','WH2+qHCFkS3Fnm/QKGF/oeoI6AzSpGsdYpj538YjZk8=','2009-03-18 20:46:21',0),('linkedin','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','KM2wSB8YAfz76YM/1D+TruoI6AzSpGsdYpj538YjZk8=','2017-01-30 08:02:16',0),('linkedin','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jo2vExLnPq69fbzLTZFgkuoI6AzSpGsdYpj538YjZk8=','2021-11-26 15:33:20',0),('Listonic shopping list','SCrZN5irP6mdQxLKKv53ackjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','8CxnYUTN5dyOAcPrJ4QKbuoI6AzSpGsdYpj538YjZk8=','2021-11-25 20:16:01',0),('lufthansa','9z0vBNgLegL4Z6i3VAKVQ4pOmwx80EXeYqKxxxHl44c=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','RBwHTP7F3gbYE0xhsqrp2uoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:16:40',0),('luw','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','hT7P9Lzrc1xPBUu0i7Wj9eoI6AzSpGsdYpj538YjZk8=','2011-03-18 21:10:26',0),('Lview','zXDLsHf3xxjjdC71U6EVLuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','12WiTQIilHmpa+GO8jo0seoI6AzSpGsdYpj538YjZk8=','2001-03-17 12:24:54',1),('lwn','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','qzNc0SQrMlKRKOU8nFq84+oI6AzSpGsdYpj538YjZk8=','2004-03-17 18:03:02',0),('mail','sbeVpLCwj5oXzmb8CzQhWOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Cs/f/42f8sIrNJJH1JkZieoI6AzSpGsdYpj538YjZk8=','2010-03-18 21:05:20',0),('mail','gFoU/1cnz8CU8OpK89ftv+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','OcvDUjn1jDiZ3aL72L5bDuoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:13:11',0),('mailbox.suy.nu','Sim/tbHMbuEhtjCOi3mrxW4AgOvn4301CxmNLHeNIyNo5ezVpxPJwFt6n0oKBuAN6gjoDNKkax1imPnfxiNmTw==','qEaLScwgOQc0OEetbD8eMuoI6AzSpGsdYpj538YjZk8=','g59Q3se9Vej2yt27W8lu1uoI6AzSpGsdYpj538YjZk8=','2017-05-29 16:31:11',0),('mailinglists','PWyxm9AlhQsp9Gp+SHqTsskjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','g9V/bPvo1kETyUUjVBuqs+oI6AzSpGsdYpj538YjZk8=','2003-03-17 16:32:34',0),('mantis','Jb2qK0gerpkXsledefBJ3OoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','zbFvaSG+a8qz0IYWyknHy+oI6AzSpGsdYpj538YjZk8=','2012-03-18 21:13:37',0),('marktplaats.nl','M0eupYvzs45sOfz7GW6zYR5XYL+Ez61lZSXHm+wJQww=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','/+w+1B02l31mGQynmV3bMuoI6AzSpGsdYpj538YjZk8=','2007-03-18 20:34:53',0),('marktplaats.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','p+7TvHWxz6DrZkjS2lZ3luoI6AzSpGsdYpj538YjZk8=','2021-05-24 12:46:54',0),('mastercard 3d secure ','zszD8AHwKYelUR23I/vtxCBSqrmNlhyGCT1qjuaFs9U=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','LHi1W4q0m/lLULu6Unhx3uoI6AzSpGsdYpj538YjZk8=','2021-08-28 09:07:02',0),('maxim-ic','hgVLlDRLbh8ZW46ZGfwC6NeJckMWx3rRXx+SCwF+tL8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','zbFvaSG+a8qz0IYWyknHy+oI6AzSpGsdYpj538YjZk8=','2005-03-18 20:23:04',0),('mediamarkt.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Vph3ISf0arQkZQoeCXPBk+oI6AzSpGsdYpj538YjZk8=','2020-12-16 13:24:44',0),('mediatomb','uZEJqp00KX33FEU1lnHaMHLUcOLQZb7Vmsg/JrYD9N4=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','NtMSyw0OtUsDwnkKFa9CVOoI6AzSpGsdYpj538YjZk8=','2007-03-18 20:36:28',0),('michael and hermien','Z7+wWxSEFQkNqNpn4Ul6Z1LI03UsKVbR2NriC1QEOzU=','jc4kE5y1g1wLBFMA773O0eoI6AzSpGsdYpj538YjZk8=','O2AzB46VdvlOI98vNu4kUOoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:06:45',0),('microsoft live','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Q+3Tg39vUiWFvJMhPMkcPOoI6AzSpGsdYpj538YjZk8=','2013-03-18 21:21:04',0),('Mijn vattenfall','SCrZN5irP6mdQxLKKv53aQcpXgCUa+TQLd7i7iBIzIY=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','U/jTLg68ggAfRFmiWA0JwuoI6AzSpGsdYpj538YjZk8=','2020-03-10 20:48:41',0),('mijn ziggo','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','+s2t4lDO7bS2qMt8mB16MOoI6AzSpGsdYpj538YjZk8=','CB+Uy9PCaCVAkT+imAyqLeoI6AzSpGsdYpj538YjZk8=','2020-12-13 10:04:26',0),('mijn.nn','nVLZWW2vsg67oyKxZbjfeuoI6AzSpGsdYpj538YjZk8=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','8I6/qnZy4c1Iy5gqunNoHlOqnJzJnBfqnU7XDJdqF1k=','2017-12-07 10:26:08',0),('mijn.nn.nl','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','lDe4CSZnnAzEUAmXjylCP+oI6AzSpGsdYpj538YjZk8=','j7Y0Gt2JV4UfwFomfFw+TeoI6AzSpGsdYpj538YjZk8=','2015-09-30 18:59:38',0),('mijn.nn.nl','lDe4CSZnnAzEUAmXjylCP+oI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','8I6/qnZy4c1Iy5gqunNoHlOqnJzJnBfqnU7XDJdqF1k=','2017-04-18 18:03:56',0),('mijn.nn.nl','nVLZWW2vsg67oyKxZbjfeuoI6AzSpGsdYpj538YjZk8=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','8I6/qnZy4c1Iy5gqunNoHlOqnJzJnBfqnU7XDJdqF1k=','2017-11-30 15:23:05',1),('mijndomain ftp','49+iMbFir3FGl6Zn4Rf53eoI6AzSpGsdYpj538YjZk8=','G6Vx507Ljr8SwSOka8MTHuoI6AzSpGsdYpj538YjZk8=','sYdHjfh77aSBtwOx5fzXgOoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:10:33',0),('mijndomein','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','sYdHjfh77aSBtwOx5fzXgOoI6AzSpGsdYpj538YjZk8=','2010-03-18 21:02:46',0),('mijndomein email','khnQzqsQwBzgz1srEmm5DuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','OOoMFvJYImmjhkytcXDELuoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:09:34',0),('mijndomein email','IFcg5X5UFd4h3wjd+lUDYZSjeDeygTEU/pRTYY76NfU=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','TJ669oXIMWfSnJIEQluG5eoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:09:57',0),('mijndomein email','LffUE3eR9+vn1WV2SA+uOOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Mxfs5xKUzmh8HD46PWS3WuoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:10:54',0),('mijndomein email','A1TG//R067XIJg7oLhpgPeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','W9oQS+ZnPoDLh0gLTYv0fuoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:11:27',0),('mijndomein support','khnQzqsQwBzgz1srEmm5DuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','sYdHjfh77aSBtwOx5fzXgOoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:09:09',0),('mldonke','Jb2qK0gerpkXsledefBJ3OoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','wg3w2dOY/07Vn9l7eNEQHuoI6AzSpGsdYpj538YjZk8=','2006-03-18 20:29:21',0),('Monsterboard','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','moKLwHw6VKTzw/3osgCqIuoI6AzSpGsdYpj538YjZk8=','2003-03-17 16:29:40',0),('mp4 winkel.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','/XmTvcEqOv43x+zEwUd6Q+oI6AzSpGsdYpj538YjZk8=','2008-03-18 20:40:08',0),('MSDN','PUPq3magdsRgLGgpcdQOqeoI6AzSpGsdYpj538YjZk8=','0YVLPAT26SKF3eZUtm2sHuoI6AzSpGsdYpj538YjZk8=','Mxfs5xKUzmh8HD46PWS3WuoI6AzSpGsdYpj538YjZk8=','2001-03-17 16:13:00',0),('msn','GxgLGEPUH9bAloa0MBPiTGgZBjZ9fR21xhTZkHqsyNU=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','H65rEiuJcwfGuJB3mtXsvOoI6AzSpGsdYpj538YjZk8=','2007-03-18 20:37:17',0),('msn','GxgLGEPUH9bAloa0MBPiTGgZBjZ9fR21xhTZkHqsyNU=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Lo4BCIEGzkCHGd9coIM7suoI6AzSpGsdYpj538YjZk8=','2010-03-18 21:04:22',0),('my.parallels.com','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','w+rGMylJq2zKASdUqL3c/OoI6AzSpGsdYpj538YjZk8=','2020-12-21 14:29:25',0),('mysql','aapv6MPrrlNS72X0q0MfdOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','T+yvsXhQW5aU8giWJ4MWFOoI6AzSpGsdYpj538YjZk8=','2007-03-18 20:36:10',0),('myTomTom','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','JpeSTnDHtd7Oai8OISnYL+oI6AzSpGsdYpj538YjZk8=','2013-06-21 08:22:38',0),('nagios','oAo9qv7M0R6x4ao3PeoVPeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','T1ftPrnUWzcPWKhqcdr/4OoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:08:10',0),('Need4Speed-Hp2','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','VaU8Zg2etFED1HHCsYakvKsq7kKx3Oa720hlXxgAZVY=','2003-03-17 16:32:13',0),('nescio','aapv6MPrrlNS72X0q0MfdOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','AaVfEiP85N916dgUaLGqouoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:07:41',0),('Nescio','aapv6MPrrlNS72X0q0MfdOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','AaVfEiP85N916dgUaLGqouoI6AzSpGsdYpj538YjZk8=','2009-03-18 20:49:45',0),('netflix','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','4mLb9CTi7gxXjRh78HP8vuoI6AzSpGsdYpj538YjZk8=','2013-09-11 09:22:08',0),('netgear nighthawk','Jb2qK0gerpkXsledefBJ3OoI6AzSpGsdYpj538YjZk8=','azH2fdgKHJ42aH/kt9VA8eoI6AzSpGsdYpj538YjZk8=','pxl0fctuhkwM/UDhvAAkr4lpHGDkqgHcfPWaVasJmbA=','2022-01-06 08:32:23',0),('netgear.com','SCrZN5irP6mdQxLKKv53ackjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6RFvZ//hKQZXfV12wVebPOoI6AzSpGsdYpj538YjZk8=','2022-01-06 08:05:22',0),('Netscape Netcenter','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','PUPq3magdsRgLGgpcdQOqeoI6AzSpGsdYpj538YjZk8=','2jE37hWVYD/jHGwJ2sFy++oI6AzSpGsdYpj538YjZk8=','2002-03-17 16:20:48',1),('newyorktimes','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','PUPq3magdsRgLGgpcdQOqeoI6AzSpGsdYpj538YjZk8=','IM/cm2gBoZNvpiS7vVsRP+oI6AzSpGsdYpj538YjZk8=','2002-03-17 16:22:48',0),('nimbuzz','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','YFlB2QCMcQ8jTwOWazQAPuoI6AzSpGsdYpj538YjZk8=','2009-03-18 20:45:33',0),('Norton AntiVirus','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','IhCTkdqCzc9ZKQq6FWL5Dj0N7R3NLV8kF258LlMhMQw=','2001-03-17 16:11:07',1),('Novell.Suse','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','9YSWHLp3EeyeFbvLFLb72uoI6AzSpGsdYpj538YjZk8=','2005-03-18 20:23:56',0),('ns.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','I4uT67qUBnsz6gadzSrXH+oI6AzSpGsdYpj538YjZk8=','tswqwP3iP//P4SeMn8F5A+oI6AzSpGsdYpj538YjZk8=','2016-12-12 10:21:08',0),('ntop','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','OiXZ66o8cRkk2nlHOC1OzuoI6AzSpGsdYpj538YjZk8=','2005-03-18 20:22:42',0),('obiovino.nl','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','UIJCsuCwTqtrMzhQXiWV/eoI6AzSpGsdYpj538YjZk8=','2014-08-26 18:01:11',0),('office 97 SBE','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','OGgFgphVOjPPrEqtxteP39XBcr92BoZbFC6zc18jHRk=','2001-03-17 16:10:29',1),('old mail clockwork','kLoyTMh6u8iIF715Yrl8FIR3WHK76rryLIgHqPcM+eU=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','BceJQiBT/VE3K5bMxxwz2OoI6AzSpGsdYpj538YjZk8=','2011-03-18 21:08:45',0),('oneplus.com','q2iCHEtbGBNeQKrWrn6gBX6+b+z4QlTQ74/SItn2Azs=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','cAe8NY3uzU7dHXw+N8gDkuoI6AzSpGsdYpj538YjZk8=','2018-11-15 18:17:12',0),('onplus.com','q2iCHEtbGBNeQKrWrn6gBX6+b+z4QlTQ74/SItn2Azs=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','cAe8NY3uzU7dHXw+N8gDkuoI6AzSpGsdYpj538YjZk8=','2018-11-15 18:16:36',0),('opera','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jtkcFvMMRVm/b6S2FJpMUOoI6AzSpGsdYpj538YjZk8=','2020-02-01 12:05:34',0),('oracle','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','sAFq1o5UjZMN98GMxYmw++oI6AzSpGsdYpj538YjZk8=','2013-03-18 21:21:18',0),('oracle.com','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','woZS7n89zuugT4K6fH6pu+oI6AzSpGsdYpj538YjZk8=','2020-08-30 07:02:56',0),('oreilly safari','KwhUQqdjq8EXbSK8bEutSeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','213W/5IDoghbQJPCyEbEvOoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:08:29',0),('oreillys','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','bxXTO0kq08abJuBy2xFzROoI6AzSpGsdYpj538YjZk8=','2013-03-18 21:23:12',0),('otto.nl','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','+cHyGP+a+HIefpydkv29pOoI6AzSpGsdYpj538YjZk8=','2013-04-08 18:38:30',0),('p3Wiki','MZIyFtkFiSPV5ALLaGrRxeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','bvZM1Ck1x9wcFBO5DV+DZuoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:04:06',0),('p3Wiki db','l9DeQF7RH3QHJVDJqC3dz+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','fqBeJz/7Xb01y2PSx8lEAeoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:04:30',0),('paradigit.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','PpqvDEwUdC0dZ9FZQNRFs+oI6AzSpGsdYpj538YjZk8=','2022-01-17 08:57:34',0),('Parkmobile ','SCrZN5irP6mdQxLKKv53ackjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','y/O9KLd0sCdmaeiNJz/pk+oI6AzSpGsdYpj538YjZk8=','2021-12-13 22:04:54',0),('pathe','SYpj9F7Nv7YYWPH3MoaeDuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','tF9ApsAAZdTnSlQDX6ksK+oI6AzSpGsdYpj538YjZk8=','2003-03-17 16:33:53',0),('pathe','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','nVuXgNOT4BlcMoLPIIvDqeoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:16:54',0),('pathe','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','eLxcamBcjODYM0Qu4cuHvOoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:18:14',0),('paypal','khnQzqsQwBzgz1srEmm5DuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','G6dWWqcDRYiS3YldrTFUxOoI6AzSpGsdYpj538YjZk8=','2009-03-18 20:46:36',0),('philips','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','bhW0fhXdC3OnnG5JhofReeoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:15:00',0),('phloston','IM/cm2gBoZNvpiS7vVsRP+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Lo4BCIEGzkCHGd9coIM7suoI6AzSpGsdYpj538YjZk8=','2007-03-18 20:33:06',0),('phloston','DRFjuOzm7eZOCmFIdQyVT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','AgKay5bS33F86ACBhkHfL+oI6AzSpGsdYpj538YjZk8=','2013-09-16 10:04:43',0),('Picl.nl','SCrZN5irP6mdQxLKKv53ackjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','LDE/WiQqrO04ZdajDZKJluoI6AzSpGsdYpj538YjZk8=','2021-12-22 22:28:01',0),('Picl.nl','SCrZN5irP6mdQxLKKv53ackjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','FDAwo59e/DQWlLYEiZWodOoI6AzSpGsdYpj538YjZk8=','2022-01-06 19:38:39',0),('play.com','khnQzqsQwBzgz1srEmm5DuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','bjYxwDyCmPiZ3irNhTjP7OoI6AzSpGsdYpj538YjZk8=','2008-03-18 20:40:44',0),('plex.local','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','JUk3JtLyYLf01CZ0BkcmJuoI6AzSpGsdYpj538YjZk8=','cf+mQczgESP3JAQamcw/9eoI6AzSpGsdYpj538YjZk8=','2022-08-27 10:33:04',0),('plex.local','G5JdoquYNaTz8tqLxsNDjuoI6AzSpGsdYpj538YjZk8=','inV5yjbDVePoHQwWJ3n5ueoI6AzSpGsdYpj538YjZk8=','cf+mQczgESP3JAQamcw/9eoI6AzSpGsdYpj538YjZk8=','2022-08-27 10:34:08',0),('plex.suy.nu','8m5tVfcXfUWCxGwDpHLwsOoI6AzSpGsdYpj538YjZk8=','6x6sMQW2QJZMMmbRZTELQeoI6AzSpGsdYpj538YjZk8=','+iHpZqgK0vIUvU6e7F4/K+oI6AzSpGsdYpj538YjZk8=','2016-10-10 17:57:28',0),('plexapp.lighthouseapp.com','khnQzqsQwBzgz1srEmm5DuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jUSJmf7LxkTWgE8LghXQNOoI6AzSpGsdYpj538YjZk8=','2008-03-18 20:39:19',0),('plexforum','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jUSJmf7LxkTWgE8LghXQNOoI6AzSpGsdYpj538YjZk8=','2007-03-18 20:37:52',0),('pm4success','cle81hWAI4509uSgjtsxCuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','baYWV1XXVNxXD8aO80F2OuoI6AzSpGsdYpj538YjZk8=','2006-03-18 20:31:06',0),('Polymita Partner','3fe9CR4wyGfxYrGyGk15QQ3RXeVTXC/JKm1GxBKvS00=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','DOOQ+wpOm3Ns26izLSuUu+oI6AzSpGsdYpj538YjZk8=','2008-03-18 20:42:06',0),('PragmaticBookstore','boFzZhnjV/bpmotalueEyOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','5b4erFmROS/k75H+ksu7r+oI6AzSpGsdYpj538YjZk8=','2006-03-18 20:29:03',0),('Primevideo.com','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','u0hMGzlP0Rc1p0Ern3uNAeoI6AzSpGsdYpj538YjZk8=','UFlEkbJFyAe5HEg3ac5SD+oI6AzSpGsdYpj538YjZk8=','2020-03-15 16:27:07',0),('Projectidee.com','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','UFlEkbJFyAe5HEg3ac5SD+oI6AzSpGsdYpj538YjZk8=','2020-03-15 16:26:02',0),('proxis.be','PUPq3magdsRgLGgpcdQOqeoI6AzSpGsdYpj538YjZk8=','ynxLg8CtZX90y5U32JyF8OoI6AzSpGsdYpj538YjZk8=','x18RjlOBxqFpF6QNWHnRWuoI6AzSpGsdYpj538YjZk8=','2002-03-17 16:22:22',0),('PureSecure','YTN65HN2ho2yhrsrbeyCTuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6TnCy6uKO7DtBDevpX+cP+oI6AzSpGsdYpj538YjZk8=','2003-03-17 16:29:59',0),('querijn','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','O0xSTNiN+KV+IsPn1e8SHOoI6AzSpGsdYpj538YjZk8=','2008-03-18 20:42:34',0),('querijns mac 2017','Jb2qK0gerpkXsledefBJ3OoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jQQh7MPL+3dlnRcD4UX2Mja2B9ijY0gW167ROostjm8=','2017-08-06 10:54:47',0),('RABO creditcard','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','VMtVMsC3kxm6e8NtTCj8RvRQ3Lq4T5G0R11Vlu/ETfk=','BGNbIo939uboW5+FfDWLUeoI6AzSpGsdYpj538YjZk8=','2001-03-17 12:24:07',1),('Rabobank','1TckXvcj7C9KmAhY1bzPU5c9Z1pRxUADJpYUp2YNBzQpIhLbloQALWtPKiqKX53p6gjoDNKkax1imPnfxiNmTw==','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','58Tw3+31rTTEovWDgVwoluoI6AzSpGsdYpj538YjZk8=','2002-03-17 16:23:25',0),('redhat network','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','8zVW4+diIUBKdoqWq06ksD80vHo126hT4UPRshreq3s=','NylPdDRoZRskcdYwTN006+oI6AzSpGsdYpj538YjZk8=','2003-03-17 16:33:01',0),('replicon.com / grandvision','mjXh1+StqQ27GYXx0k7PDuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','URCgERfgf+xTouWf8A/y+eoI6AzSpGsdYpj538YjZk8=','2013-03-18 21:22:13',0),('repo (git)','zkJeUEgeCJKOUMRFlkXwsOoI6AzSpGsdYpj538YjZk8=','DsxA5NhNKOTECLDwcsV+C+oI6AzSpGsdYpj538YjZk8=','+2QQGLN8IxO2xufx7zWL6+oI6AzSpGsdYpj538YjZk8=','2017-07-17 12:17:06',0),('Route66','xVxxOKlvebjjuWEIbMvrCy9Qs9pf7/C61j/8tzJwmme77xDirx3g2+qgTQPd4HYW6gjoDNKkax1imPnfxiNmTw==','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','tltRrsdHdfb88x/Az7JJaI/0NyYZoQVxOP6RNrqu/i4=','2001-03-17 12:26:21',1),('scibit','zq1q7Wx+EQRqnneD9yxt7nddYcMKdnYepm6/orTHysY=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','T4RVsOHA4oyYiT5lm7r9zuoI6AzSpGsdYpj538YjZk8=','2003-03-17 16:31:15',0),('scipio','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','n09bXGNRMLg3f8Hk3Nb3VOoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:07:56',0),('sencha','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','2T4r9IBz9+NVVptlYDny5OoI6AzSpGsdYpj538YjZk8=','2013-03-18 21:22:38',0),('Sidekick 2.0','U04+qaNGGwd7FKXIMdPPT58KbTa2Byg3BmuNBe0LT4g=','G530p55XC0ETS72zdoy6d5DFpXoc1veBB4hhtvvD7D/gXyBxL6wgJ85NH1rBj6hg7JmSNNjeatxYYWR4gt0ETw==','KZc0a9AwRSag3F0QkfKXGjZPtK91PIBpiysY2N9NKrY=','2001-03-17 12:25:35',1),('sigaro','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','AInEIwvk98wYjYHq5WS8RuoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:07:23',0),('signal','P+ueLuYa7e4vr2g0fk7qnOoI6AzSpGsdYpj538YjZk8=','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','ORdorFQbMUtKCyt30f3NS+oI6AzSpGsdYpj538YjZk8=','2021-11-23 13:52:46',0),('sivi','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','aElExIawTtEGPXjJ5MqmzdL3HyDoZVODqsebZw3sOAQ=','cf+mQczgESP3JAQamcw/9eoI6AzSpGsdYpj538YjZk8=','2008-03-18 20:42:56',0),('Skype','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','cf+mQczgESP3JAQamcw/9eoI6AzSpGsdYpj538YjZk8=','2007-03-18 20:33:48',0),('skype','Z3ITCr7Jx7ui3Ys/yHVETeMYTR0B69EWp+HIiSLyR3E=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','2AevEVYUKs/WuaovgVQkJOoI6AzSpGsdYpj538YjZk8=','2008-03-18 20:41:15',0),('skype','t8NOgl3espYj8vjNi21sKOoI6AzSpGsdYpj538YjZk8=','D4ZJiuzlNuf5QaQ0tEIpeuoI6AzSpGsdYpj538YjZk8=','/WcPR8JddnBR9bCharVV9+oI6AzSpGsdYpj538YjZk8=','2010-03-18 21:04:02',0),('skype','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','l8ZzyxmAedYeLij0GN9f++oI6AzSpGsdYpj538YjZk8=','2012-03-18 21:12:08',0),('skype','keLsRjf2RpRlWlcK4ueTGPw06aLSFbfb3Cvi17mLz9M=','RJ8+NSyUqFsjzmw789Lyc5SjeDeygTEU/pRTYY76NfU=','WnR0ySOE0u/gTMTBchtZIuoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:18:38',0),('sossolutions.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','2T4r9IBz9+NVVptlYDny5OoI6AzSpGsdYpj538YjZk8=','2013-03-26 12:36:51',0),('speurders.nl','BgqD9sdDIe1ZNGfG5ZSclWgZBjZ9fR21xhTZkHqsyNU=','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','34bxm7bem5aaREwxtOLL3uoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:15:25',0),('spotify','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','2T4r9IBz9+NVVptlYDny5OoI6AzSpGsdYpj538YjZk8=','2014-01-13 19:49:56',0),('ssh root@85.214.220.45','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','Hba+IxQ2gWVEqkUIlcTuVx2AgZVwQPpsVAjiAANk/ao=','vIFdizfVwvgPjS7ax0WiRXuJTl3AjxVGbCiuDuDxnxE=','2020-05-24 12:50:10',0),('ssl-certificaten (Xolphin)','boFzZhnjV/bpmotalueEyOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','VOcVdXHD1bHCF6jGpTlGZeoI6AzSpGsdYpj538YjZk8=','2006-03-18 20:26:19',0),('Stichting Welzijn Diemen!','K03ZFXLId8KsJoHhuZ8bqeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','xMYGhbJFkScp0NRUYvBux8d6Enbqor3tdljb0LYhi+8=','2011-03-18 21:11:29',0),('Sun online','7GY189xdIFfs7mmtu8PXnOoI6AzSpGsdYpj538YjZk8=','dckZiJfnYJPIACkUCgbe4R4yNCAWOEi1N840Jq/H7wo=','BY30CghO3JihGfw0RdB+OuoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:03:34',0),('t-mobile','tdeFOeQUJUKTuJcGYeg8ROoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','rcb9F7zf1y0OmCpxEh5Nr+oI6AzSpGsdYpj538YjZk8=','2006-03-18 20:27:50',0),('t-mobile','JqlWIWb4xi/tv9+XLgiV5eoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','r+1pAFxiUMLsq0L+X/QuxOoI6AzSpGsdYpj538YjZk8=','2006-03-18 20:28:07',0),('t-mobile','LEUnH/zmufzKQrLjiKu6mOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','gVgD0g5/W380PGQtMmbJkuoI6AzSpGsdYpj538YjZk8=','2006-03-18 20:28:46',0),('t-mobile','t8NOgl3espYj8vjNi21sKOoI6AzSpGsdYpj538YjZk8=','qw7DAoESEfYw17jLD8yLrtBks7hKvBsaTELr/JM68oY=','I7gjK9z/fTPKNb4t4aGZu+oI6AzSpGsdYpj538YjZk8=','2007-03-18 20:36:56',0),('termeulen','QHH2odMW9/SrItWkXMvMbQ+ShcW7Q31xSkkSV/G8OQc=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','I2na2gthEpbtjUEyNfHt4uoI6AzSpGsdYpj538YjZk8=','2005-03-18 20:22:29',0),('TextMate','8TY85Mmcnx5vCQL4YaQPouoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','FlHCf84BqqNJJydoWfHCKuoI6AzSpGsdYpj538YjZk8=','2007-03-18 20:34:04',0),('tiki','6Ycf2VfAEeseh77vtnzlWuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','JY7V1rHzMO0eYn7nixpqP+oI6AzSpGsdYpj538YjZk8=','2008-03-18 20:39:00',0),('uber','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','kKAK0JxOzAFMSyFc+sXFI+oI6AzSpGsdYpj538YjZk8=','2022-05-09 16:26:38',0),('UPC','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','G2jX3+LwZsKuxul/j6tG6+oI6AzSpGsdYpj538YjZk8=','2005-03-18 20:23:41',0),('UPC','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','g2OfTDikjmjkJkF/j+n5/OoI6AzSpGsdYpj538YjZk8=','2012-03-18 21:19:53',0),('upc cloned macaddress','keSJDhx/46tUSM05Cb6GkAOYJ9Axoy4FNkc86CqYmuo=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','2009-03-18 20:49:32',0),('UPC ziggo','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','G2jX3+LwZsKuxul/j6tG6+oI6AzSpGsdYpj538YjZk8=','2017-01-26 22:14:20',0),('usbdrive','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','AvX5Eubp4/8TNbYt4sDfFeoI6AzSpGsdYpj538YjZk8=','2009-03-18 20:48:15',0),('vereniging eigen huis','sIrQ1aiq6VPLvTmzPPewneoI6AzSpGsdYpj538YjZk8=','3GdUtLMdrDnDA6I2IkIzUOoI6AzSpGsdYpj538YjZk8=','sujBOcv9/yIZjlIFyXYYNeoI6AzSpGsdYpj538YjZk8=','2005-03-18 20:21:36',0),('vereniging eigen huis veh','sIrQ1aiq6VPLvTmzPPewneoI6AzSpGsdYpj538YjZk8=','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','QWptBDMg+8Zzlq0m/7b36OoI6AzSpGsdYpj538YjZk8=','2013-04-21 19:58:48',0),('vistaprint','ftJxwnmDEfCudfO+mSCSdeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','p/KgpNaAPQOQ2kGdFiy8ZOoI6AzSpGsdYpj538YjZk8=','2003-03-17 16:31:59',0),('Visual J++','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','vEnDAz/4HDYgfNFAVYdxiuoI6AzSpGsdYpj538YjZk8=','2001-03-17 12:24:24',1),('Vizzavi','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','cf+mQczgESP3JAQamcw/9eoI6AzSpGsdYpj538YjZk8=','2003-03-17 16:28:47',0),('vodafone.nl','YJ1JUO1x7i7yFOxGgaHkDOoI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','bNzZcDZ8c0x1ZtxTjHmTreoI6AzSpGsdYpj538YjZk8=','2013-11-13 08:50:40',0),('volkskrant.nl','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','rz+HRfF1922UVQFTXMLSeOoI6AzSpGsdYpj538YjZk8=','2014-01-09 12:25:15',0),('volkskrant.nl','q2iCHEtbGBNeQKrWrn6gBX6+b+z4QlTQ74/SItn2Azs=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','j0yq7Z1NwgtTD2Ib1f+2GOoI6AzSpGsdYpj538YjZk8=','2021-12-23 11:08:48',0),('waternet','YoFz0/IVorJPF+bWabFv3+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Fjr1ioLSn9/7k+ATPWFHFOoI6AzSpGsdYpj538YjZk8=','2005-03-18 20:23:18',0),('waternet','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','OLtsqpLeIEvp25y80xAZL+oI6AzSpGsdYpj538YjZk8=','2018-10-26 10:42:52',0),('webmail catch-all-email@suy.nu','mrE0i0rC7K5Ymr82kf7nxxvxkLf2srCtn3nIstCbZAw=','vAw9OpPdCF9Gz6CsAQT9KeoI6AzSpGsdYpj538YjZk8=','1Q3FVhnmSkJH6r07uD7sgu1jRyS7MuMsmruWXXxQTcI=','2023-03-13 20:24:32',0),('webmail catch-all-email@suy.nu','mrE0i0rC7K5Ymr82kf7nxxvxkLf2srCtn3nIstCbZAw=','ydBbSIFUrjSp+vuPJoBJhaC0Vd4f4MVik/6BgRRUQlg=','1Q3FVhnmSkJH6r07uD7sgu1jRyS7MuMsmruWXXxQTcI=','2023-03-13 20:25:52',0),('webmail cloudserver@suy.nu','B9TbRyjtNhrbVv4iGJyFaUOawKq1boCGbFhVP02afrk=','DzxwqneqhiNlsVq1YsCVlObjxdHwelinUXIdHRsO9Rs=','Lt5NoXSg73PlJtE6BDBapfFU0XE6FTzWjHyvCTVttLc=','2023-03-13 20:21:54',0),('webmail.mijndomein.nl','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','9+Puer7Mz4ILql1ImooH+uoI6AzSpGsdYpj538YjZk8=','2020-12-21 13:25:29',0),('webmail.mijndomein.nl','B9TbRyjtNhrbVv4iGJyFaUOawKq1boCGbFhVP02afrk=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Lt5NoXSg73PlJtE6BDBapfFU0XE6FTzWjHyvCTVttLc=','2020-12-21 16:58:49',0),('webmail.mijndomein.nl','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','i7KzaxBcldj7QbxylClh3OoI6AzSpGsdYpj538YjZk8=','2021-01-10 19:38:39',0),('webmail.mijndomein.nl','mhDtQdMZiSra9+vHWTwkH+oI6AzSpGsdYpj538YjZk8=','s1tAkVv4ZOLn7iJ90xrsy/6S02lYj2awm3w4IDrdKgE=','i7KzaxBcldj7QbxylClh3OoI6AzSpGsdYpj538YjZk8=','2023-03-13 20:13:23',0),('weijenbergh 128','NuvBKsCbkioHN4Yvv2BDcOoI6AzSpGsdYpj538YjZk8=','+s2t4lDO7bS2qMt8mB16MOoI6AzSpGsdYpj538YjZk8=','/indl/NvR8SQ1AsJzIc2GeoI6AzSpGsdYpj538YjZk8=','2017-04-15 09:26:50',0),('werk.nl','z6ZGysyE4slZUYjF08FIj+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Is267/P6PiRIWnnOmLEj0OoI6AzSpGsdYpj538YjZk8=','2009-03-18 20:44:25',0),('werknemerloket.nl / grandvision','6IPYXmu4P1YP3QePmReqkHgBLf+zuinne2cT/0qzwKE=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','inDbQo9avVd96vWrLbIAweoI6AzSpGsdYpj538YjZk8=','2013-03-18 21:21:43',0),('whisky festifal den haag','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Yi1PpmbcaIQ38P6qjmOiCOoI6AzSpGsdYpj538YjZk8=','2021-06-07 06:13:47',0),('whisky festifal den haag','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','j+g7gYpbVNAET8E0wK3u2eoI6AzSpGsdYpj538YjZk8=','2022-10-29 07:54:04',0),('whub','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','PqwRnZnQJgaE+Eb8/hnb9OoI6AzSpGsdYpj538YjZk8=','2004-03-17 18:01:49',0),('wifi - nescio - scipio - legio','NyfiFECHW8eVZWxj8FX/IeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','3aKmgEIQjPKTafxkh+VZheoI6AzSpGsdYpj538YjZk8=','2019-04-09 09:43:48',0),('Windows 2000','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','jwg8Z4Bz8xZJQpGgGK5L8hkuuA5jBUwcGpk19P4Kpws=','2001-03-17 12:27:25',0),('Windows 95','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','FOR9xW0qd9JyiBML/Qm8Z3YcruZbWUDCDO9JRs9p73Q=','2001-03-17 12:26:49',0),('Windows 98','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','GApzG4BGBEPBrv2sqslpg39Gi87zf10PPnwpkWOBAzc=','2001-03-17 12:27:09',0),('Windows XP Home','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','ndP3iZiooBwtoBhJE7mMNJUqbrGdkk2Lts382aVH2VI=','2001-03-17 12:27:45',0),('Windows XP Prof','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','Ta60WHfzvxeFQuV7nJf1Fh/Ooxq79SEHpMk/FNXx8+c=','2001-03-17 12:28:02',0),('Wish / 020 5303245','mjXh1+StqQ27GYXx0k7PDuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','msWH7QYaxn/DH1Bs7mp4ieoI6AzSpGsdYpj538YjZk8=','2002-03-17 16:21:20',0),('woonveilig - fatima','pKfy7fF5uzDuAfS077kERuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','lcUptBxoiETvFI3E1nGdocciWKbpG0RaxfvXX3+SLmg=','2019-04-16 20:24:59',0),('woonveilig.nl','GH/9lh9mfCp6kV2b1mPoyeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','wFrXECMCvHiAdpng1wxH1eoI6AzSpGsdYpj538YjZk8=','2019-04-07 06:06:01',0),('woonveilig.nl voor janine','PeVQpJNpg4pkJl5ffaGRV+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','9wiJuDYKuQbtyS+VPKwy/uoI6AzSpGsdYpj538YjZk8=','2019-04-08 20:44:06',0),('wordpress blog','Jb2qK0gerpkXsledefBJ3OoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','S+nEoDIO+UOvb2NgDn6OC+oI6AzSpGsdYpj538YjZk8=','2005-03-17 18:13:26',0),('www.avis.co.uk','F0t6AZO1mtZ7zu2kUrQ1x+oI6AzSpGsdYpj538YjZk8=','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','s8XNEu/7mxspovh5DABcHOoI6AzSpGsdYpj538YjZk8=','2015-03-13 11:00:58',0),('www.degroofpetercam.lu','ob++im9O9CVZI420um4cNOoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','NGahC5WPvDE5HpeEfmrKeuoI6AzSpGsdYpj538YjZk8=','2018-04-24 20:20:15',0),('www.degroofpetercam.lu','i9grDbE92HsrZ5gCOlG4F+oI6AzSpGsdYpj538YjZk8=','ob++im9O9CVZI420um4cNOoI6AzSpGsdYpj538YjZk8=','NGahC5WPvDE5HpeEfmrKeuoI6AzSpGsdYpj538YjZk8=','2018-04-24 20:25:58',0),('www.javascripts.com','PUPq3magdsRgLGgpcdQOqeoI6AzSpGsdYpj538YjZk8=','kvobPQ1qjzMKaFoz5u9zqJfcZnzNx6MbUy/Kl1nr1SU=','IM/cm2gBoZNvpiS7vVsRP+oI6AzSpGsdYpj538YjZk8=','2001-03-17 16:12:29',0),('www.nespresso.com','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','c/FEYuY3+HxadVXXDt9FaeoI6AzSpGsdYpj538YjZk8=','2010-03-18 21:03:10',0),('www.nest.com','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','gcpOivuz/neY9SlcsMmRqOoI6AzSpGsdYpj538YjZk8=','2017-04-15 09:23:24',0),('www.reaal.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','gcpOivuz/neY9SlcsMmRqOoI6AzSpGsdYpj538YjZk8=','2019-04-30 16:09:48',0),('www.scaleway.com','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','mT3AyE7PkSmTszr1gwGJjuoI6AzSpGsdYpj538YjZk8=','2018-11-09 00:43:46',0),('www.scrum.org','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','EzakUe03mBhI+kEJgl8UW+oI6AzSpGsdYpj538YjZk8=','2020-06-15 09:05:34',0),('www.storytel.nl','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','AaVfEiP85N916dgUaLGqouoI6AzSpGsdYpj538YjZk8=','2017-04-22 09:41:07',0),('www.strato.nl','9bTbi7QB/0S2dsWqHh+OPuoI6AzSpGsdYpj538YjZk8=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','vXAM+I+cPU6lWOY8issHw+oI6AzSpGsdYpj538YjZk8=','2020-05-20 09:06:44',0),('www.strato.nl','9bTbi7QB/0S2dsWqHh+OPuoI6AzSpGsdYpj538YjZk8=','WzpTHo5pwP/FIqbhvf9d+ckjorRqHzY2cyEmz/A9/RQ=','sJvkxt32ZTL0LwZKF3B8P+oI6AzSpGsdYpj538YjZk8=','2021-03-18 20:25:40',0),('www.vnsg.nl','JmvNP1P0ZHC3/HqzF+N6eTKnZHkHW1EMiTyfcF22soI=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','SB3yBTqYOaipVnnaOiTyHuoI6AzSpGsdYpj538YjZk8=','2015-09-29 06:50:39',0),('xolphin','DnpXL9J7KB1NKt7yxEYxm+oI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','S/x8ExpTOL/n35mdSCU0I+oI6AzSpGsdYpj538YjZk8=','2010-03-18 21:05:02',0),('yahoo.com','sKO3h3M1s+V7MEcH0aKVeckjorRqHzY2cyEmz/A9/RQ=','gNct0At0DiT+X2iFm0PXmOoI6AzSpGsdYpj538YjZk8=','QIWwQXwgUSvmpKyft7H2juoI6AzSpGsdYpj538YjZk8=','2007-03-18 20:33:29',0),('zaalhuur https://asp3.lvp.nl/amisweb/diemen/amis1/','u3oWkVuvHp8jR1xddBdreuoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','mm/aHzP0hOQK1LpT1q5WGuoI6AzSpGsdYpj538YjZk8=','2011-03-18 21:09:58',0),('Zabbix','KnemJcsDQ0fUFbZgyeusSeoI6AzSpGsdYpj538YjZk8=','6gjoDNKkax1imPnfxiNmT+oI6AzSpGsdYpj538YjZk8=','JYUorMlPU451F0XTVXns3eoI6AzSpGsdYpj538YjZk8=','2006-03-18 20:26:34',0); +/*!40000 ALTER TABLE `ignace_` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `janine_` +-- + +DROP TABLE IF EXISTS `janine_`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `janine_` ( + `organization` varchar(80) NOT NULL, + `myID` varchar(129) NOT NULL, + `myName` varchar(129) NOT NULL, + `mySecret` varchar(65) NOT NULL, + `dateCreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `deleted` int(11) DEFAULT '0', + PRIMARY KEY (`organization`,`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `janine_` +-- + +LOCK TABLES `janine_` WRITE; +/*!40000 ALTER TABLE `janine_` DISABLE KEYS */; +INSERT INTO `janine_` VALUES ('123INKT','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','dqNw72GdzK24S7jN9o00IFC4U6OMOw8XiUPif+jUpX8=','2018-12-24 10:59:39',0),('ABN Amro Creditcard','iZb/WSiBma/s8QM59yYzG8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','lVOt68mOC9zx76I8jH3c7rQCmPYqa3w58abbcuuEyHM=','2018-12-24 10:30:32',0),('ABN Amro Creditcard','iZb/WSiBma/s8QM59yYzG8QIC1gjrGWlZjslcv1ucI0=','qmpRaDYNr28Y4xNNRx+zpMQIC1gjrGWlZjslcv1ucI0=','lVOt68mOC9zx76I8jH3c7rQCmPYqa3w58abbcuuEyHM=','2021-02-18 10:11:48',0),('ABN Amro Gold Creditcard','iZb/WSiBma/s8QM59yYzG8QIC1gjrGWlZjslcv1ucI0=','qmpRaDYNr28Y4xNNRx+zpMQIC1gjrGWlZjslcv1ucI0=','lVOt68mOC9zx76I8jH3c7rQCmPYqa3w58abbcuuEyHM=','2021-02-18 10:12:13',0),('ABN Amro Gold Creditcard 64971','iZb/WSiBma/s8QM59yYzG8QIC1gjrGWlZjslcv1ucI0=','qmpRaDYNr28Y4xNNRx+zpMQIC1gjrGWlZjslcv1ucI0=','lVOt68mOC9zx76I8jH3c7rQCmPYqa3w58abbcuuEyHM=','2022-03-02 21:38:14',0),('ABN Amro Gold Creditcard 64971','iZb/WSiBma/s8QM59yYzG8QIC1gjrGWlZjslcv1ucI0=','qmpRaDYNr28Y4xNNRx+zpMQIC1gjrGWlZjslcv1ucI0=','lVOt68mOC9zx76I8jH3c7rQCmPYqa3w58abbcuuEyHM=','2022-03-02 21:38:21',0),('ABN NL53ABNA0247355232 pas 441','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','dTv2ql7/JWXPnXygouzqc8QIC1gjrGWlZjslcv1ucI0=','2021-02-14 21:18:26',0),('ABN NL65ABNA0247117560 pas 221 ','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','OoLdmsD5GhjTTgshYZZxxMQIC1gjrGWlZjslcv1ucI0=','2021-02-14 21:26:34',0),('actie van de dag','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','czdl6f8D8I1sLIc7TTwKrMQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:20:25',0),('administratie Ignace en janine','d7FlJoA5ecCu56+VxqkEdcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','oAy+xW18AnwqCi9UO36gbMQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:18:12',0),('Administratiehuisartsvanmuiden@ezorg.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','7hhBR+1KeMTCkoiaTCa0zMQIC1gjrGWlZjslcv1ucI0=','2021-12-02 14:53:33',0),('Airmiles','LrKcgHR/DIHx/FaFoZ2gKsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','qvSi25jQS5Cc6uye8oYeCHQyLkk+Obfw5qm8jRUsGC4=','2018-12-24 10:16:50',0),('Airmiles','LrKcgHR/DIHx/FaFoZ2gKsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','qvSi25jQS5Cc6uye8oYeCHyj2zDr/kaMxoDMA5ZGumA=','2020-03-12 13:07:49',0),('Albert Heijn bestellen thuisbezorgen prive','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','/QnDo2XBdyxIn6zJ8wGF78QIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:42:16',0),('Amazon','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','MMg6E/MXEohCwKA6FijLhsQIC1gjrGWlZjslcv1ucI0=','2021-01-14 23:06:47',0),('Amazon prime','Ja98eDQxnwyoCDh8DHK2LuuvsTmbfCp2WAOORuRVzgE=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','2xnnANO0hxflJCAHeA2oWsQIC1gjrGWlZjslcv1ucI0=','2021-01-14 22:12:51',0),('ANWB','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','CtkOF7U4nqn+NpNuDyV3yMQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:02:12',0),('ANWB','Yfnm1px2g1MWcgDAdkZk3cQIC1gjrGWlZjslcv1ucI0=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','CtkOF7U4nqn+NpNuDyV3yMQIC1gjrGWlZjslcv1ucI0=','2022-12-06 15:02:56',0),('Appie Albert Heijn','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','/QnDo2XBdyxIn6zJ8wGF78QIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:01:01',0),('ASN bank','9UrQZf7ycBobhlDpnqnFR8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','BibgmLlhxqFcvNpCvZPs+jxHZk/AlzReeMzrhqtP5XM=','2019-02-14 19:50:22',0),('ASN bank','9UrQZf7ycBobhlDpnqnFR8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','UNkBUZgLG8dm+HOGdpDWQDxHZk/AlzReeMzrhqtP5XM=','2019-02-14 19:51:52',0),('ASN bank','9UrQZf7ycBobhlDpnqnFR8QIC1gjrGWlZjslcv1ucI0=','+BrO8wwfZd0ExayMHhOWzMQIC1gjrGWlZjslcv1ucI0=','BibgmLlhxqFcvNpCvZPs+uSSBbb+JK0yozu2Z1bIUsg=','2019-04-25 08:57:35',0),('ASN bank','9UrQZf7ycBobhlDpnqnFR8QIC1gjrGWlZjslcv1ucI0=','+BrO8wwfZd0ExayMHhOWzMQIC1gjrGWlZjslcv1ucI0=','UNkBUZgLG8dm+HOGdpDWQDxHZk/AlzReeMzrhqtP5XM=','2019-04-25 08:58:10',0),('ASN bank','9UrQZf7ycBobhlDpnqnFR8QIC1gjrGWlZjslcv1ucI0=','+BrO8wwfZd0ExayMHhOWzMQIC1gjrGWlZjslcv1ucI0=','UNkBUZgLG8dm+HOGdpDWQDxHZk/AlzReeMzrhqtP5XM=','2020-12-02 19:22:25',0),('Bayer medischwijzer.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','qqGMPOGZeaBG+Y04B9f1osQIC1gjrGWlZjslcv1ucI0=','2019-07-08 08:08:48',0),('beheer.pharmeon.nl/Inloggen/app/','171bvJWqcI8vciGTUNCMFsIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','tOUatKbdpOZ7kKovMYioj8QIC1gjrGWlZjslcv1ucI0=','2021-01-14 09:00:05',0),('Bel Centrale','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','5x8qb5ClsitoeIdaJSNf9cQIC1gjrGWlZjslcv1ucI0=','2018-12-17 20:50:43',0),('Belastingdienst Huisarts van Muiden','5OuOe2DD2uwr6cdhYpEW7sQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','IdvPrb/xq3mGbhgcIrV5vMQIC1gjrGWlZjslcv1ucI0=','2018-12-16 15:28:58',0),('Belastingdienst Janine de Maat','lsvlcTwK3KgOr4G5/9HaU8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Wyb441YBuGaKLz0AhQOgSi1HLuHXnfPEhB+zlu789sg=','2018-12-16 15:29:47',0),('Bergman clinics app','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','GiAHplGniv/H5GnFbGMDy8QIC1gjrGWlZjslcv1ucI0=','2020-07-13 14:00:55',0),('Bijenkorf.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','VjI0iRWWOhzDDQveTkOsfcQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:36:43',0),('Body FX figure8','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','fjgybyI/j5dJAjsvCanxRcQIC1gjrGWlZjslcv1ucI0=','2019-09-26 16:40:09',0),('Bohn Stafleu en van Loghum','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','byIdVACj4xZdJwrLikkfesQIC1gjrGWlZjslcv1ucI0=','2018-12-17 20:50:04',0),('Bol Com','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','XjJe3MurJ0CqX8ftCKPgJcQIC1gjrGWlZjslcv1ucI0=','2018-12-23 14:52:44',0),('Bol Com','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','8Rg0ucRVDpe2IckP9FN0ZsQIC1gjrGWlZjslcv1ucI0=','2021-03-18 20:44:09',0),('Bonprix','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','QnAasb8vRVS5R+kMCttxTcQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:14:42',0),('Bonprix','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','OaNaAiHevUuv5xA2kySFdMQIC1gjrGWlZjslcv1ucI0=','2020-10-15 19:37:23',0),('BTW identificatienummer','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','iVarUm7nUbK9N6XWm2SJ6sQIC1gjrGWlZjslcv1ucI0=','2019-10-31 15:39:55',0),('Bureaublad praktijk janine','9oGbuztjSVdgwEnaghcKVsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','ZeazV11fVEX2Yzn89L0BC8QIC1gjrGWlZjslcv1ucI0=','2020-01-13 06:48:30',0),('Bureaublad praktijk janine','9oGbuztjSVdgwEnaghcKVsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','JcyxnqC6FDr3o4CKOzcZfsQIC1gjrGWlZjslcv1ucI0=','2020-01-21 06:52:21',0),('Bureaublad praktijk janine','9oGbuztjSVdgwEnaghcKVsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','31ckQJI2o54w3fuDHhh94sQIC1gjrGWlZjslcv1ucI0=','2021-01-27 06:54:31',1),('Bureaublad praktijk waarnemer','cNCZK+8PY6yzvf+Xnl3RXsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','JcyxnqC6FDr3o4CKOzcZfsQIC1gjrGWlZjslcv1ucI0=','2020-01-13 06:49:02',0),('Bureaublad praktijk waarnemer','WALRvzivBThXaPeyrkD5ocQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','31ckQJI2o54w3fuDHhh94sQIC1gjrGWlZjslcv1ucI0=','2021-01-27 06:54:56',0),('Bureaublad praktijk waarnemer en assistentes','WALRvzivBThXaPeyrkD5ocQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','dl+8KybFSo6Oll5HVkCuNsQIC1gjrGWlZjslcv1ucI0=','2021-09-10 13:59:14',0),('Bureaublad waarnemer','dNw8GQAOu0NP3Zql2y6/v8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','0v3nhBr9ZyTH9on5g7D+lcQIC1gjrGWlZjslcv1ucI0=','2023-01-11 07:35:31',0),('CBOARDS caresharing','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','dD08Sm/YlYBwy88RhoWiBvxUQ6YqDOZyiItPi69zRq4=','2019-05-24 10:25:32',0),('CBOARDS caresharing','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','dD08Sm/YlYBwy88RhoWiBuQxLn8s15OXfof5bBXyQWw=','2019-05-24 12:30:38',0),('CBOARDS caresharing','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','s5+MJgQCxrzmiEVKh5lVSeQxLn8s15OXfof5bBXyQWw=','2019-05-27 10:48:47',0),('Cees.bezorgdehuisartsen.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','mlhe68qnfaULm1AyYXRiesQIC1gjrGWlZjslcv1ucI0=','2022-01-31 06:05:40',0),('CGM videobellen','vpyaiQpxeBeYpZoySiHlLsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','8Bkq1nZQjlnjQIhTka8xHcQIC1gjrGWlZjslcv1ucI0=','2020-03-23 14:50:03',0),('cloud https://www.suy.nu/cloud','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+xj3DE8BtGaHAx6KaoPQqkBj77v5jK8XgSpxjkuB8K4=','2019-01-18 21:38:57',0),('cloud https://www.suy.nu/cloud','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Qwk+WptpSqS33SYjk4v0kqJbnKjFM1nMwNtG3X42IPI=','2020-04-28 21:21:10',0),('Computer praktijk Vincent','guBVeCh5SU/HSd7gd27u28QIC1gjrGWlZjslcv1ucI0=','guBVeCh5SU/HSd7gd27u28QIC1gjrGWlZjslcv1ucI0=','Qaxg3krdto3x5P3F/iPXZ8QIC1gjrGWlZjslcv1ucI0=','2019-12-10 18:01:22',0),('Computer praktijk Vincent','guBVeCh5SU/HSd7gd27u28QIC1gjrGWlZjslcv1ucI0=','guBVeCh5SU/HSd7gd27u28QIC1gjrGWlZjslcv1ucI0=','ivT20fA+eRWC8T9Vhh8M5cQIC1gjrGWlZjslcv1ucI0=','2020-02-26 13:45:33',0),('Concertgebouw','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','nxEFno0BKWsOsqAH5IJKhsQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:57:38',0),('DASHBOARD open','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','peqBs7tQuOl2inzWZpHnLsQIC1gjrGWlZjslcv1ucI0=','2020-08-22 11:54:04',0),('de la mar','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','LCmf1LJyVn21n1c0jeuQq8QIC1gjrGWlZjslcv1ucI0=','2019-05-25 11:54:42',0),('De nieuwe bibliotheek','yQe0omC1mIhjNi/oNtbwB8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','KijU619Yz4DJccFX5dPUiMQIC1gjrGWlZjslcv1ucI0=','2020-02-20 19:42:42',0),('decathlon','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','HwbCxJu5aNYbajF7WVekxsQIC1gjrGWlZjslcv1ucI0=','2020-08-09 09:19:57',0),('Deen','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','zgeFq1wav72ps2AFd3+s08QIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:09:11',0),('Demo organisation','xk7M1Q6+WDOoF2lsoiPyz8QIC1gjrGWlZjslcv1ucI0=','wZ+Ea814B7iSMYpqD4xvDMQIC1gjrGWlZjslcv1ucI0=','lShfeCF1z1J5HJbSYme6b8QIC1gjrGWlZjslcv1ucI0=','2018-11-10 21:39:28',0),('DHL.nl app','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','wZ2CuXFW5grto81tJh6YhsQIC1gjrGWlZjslcv1ucI0=','2021-09-26 21:19:04',0),('DIGID','Gt4hOPzMNklmKHuJGpJu9MQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','L8byMYQjLX6rPexpLFJWAMQIC1gjrGWlZjslcv1ucI0=','2019-01-05 12:34:27',0),('DIGID','Gt4hOPzMNklmKHuJGpJu9MQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','r7euDKj49n3cO+kxxqKF1sQIC1gjrGWlZjslcv1ucI0=','2020-05-01 14:10:28',0),('DIGIPAS Dongel Promedico 2228','1XXGIlKZ7GXOA683wCy6BcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Ze5lN21OvZ1ifPAFMOJeF8QIC1gjrGWlZjslcv1ucI0=','2018-12-24 11:05:02',0),('DIGIPAS Promedico 1112','0XafPE8i8PfGStzof2KVZcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','8Aii5wflPyhYnrUOxyU/7MQIC1gjrGWlZjslcv1ucI0=','2018-12-24 11:05:31',0),('Digitalis','171bvJWqcI8vciGTUNCMFsIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','7DLGDatXAL95wIKpybUOHMQIC1gjrGWlZjslcv1ucI0=','2019-05-08 14:05:30',0),('Digitalis','171bvJWqcI8vciGTUNCMFsIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','7DLGDatXAL95wIKpybUOHMQIC1gjrGWlZjslcv1ucI0=','2019-05-08 14:05:42',0),('Digitalis NHG rx','171bvJWqcI8vciGTUNCMFsIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','7DLGDatXAL95wIKpybUOHMQIC1gjrGWlZjslcv1ucI0=','2022-10-04 21:35:30',0),('Discord','7QdrwitL/IUNGVdmngR7nsQIC1gjrGWlZjslcv1ucI0=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','9ggovigVAgdz5ItEJhzVMMQIC1gjrGWlZjslcv1ucI0=','2022-04-27 09:53:37',0),('Dongel Janine thuus','1XXGIlKZ7GXOA683wCy6BcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Ze5lN21OvZ1ifPAFMOJeF8QIC1gjrGWlZjslcv1ucI0=','2019-02-14 16:15:36',0),('Dongel janine werk','0XafPE8i8PfGStzof2KVZcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','8Aii5wflPyhYnrUOxyU/7MQIC1gjrGWlZjslcv1ucI0=','2019-02-14 16:16:25',0),('Dongel van co','4BLebNMyBdwpEBRPkg8jUMQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','bxSq6oJXUWKiVFWFfc8oZsQIC1gjrGWlZjslcv1ucI0=','2019-02-14 16:14:58',0),('Dpg.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','5KeKtXU6RtoWVKwmBNYx5MQIC1gjrGWlZjslcv1ucI0=','2022-07-12 16:52:54',0),('Dropbox','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','xQVzXLSM102JdenuYNciR+3SjL1FvzFyMBSSIiH6AwE=','2018-12-24 10:42:51',0),('Eetmeter','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','ZOGRMFxLlgXiDqintPTyTMQIC1gjrGWlZjslcv1ucI0=','2019-10-17 15:41:41',0),('EHerkenning Cream Reconi de Maat','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+BrO8wwfZd0ExayMHhOWzMQIC1gjrGWlZjslcv1ucI0=','2019-04-05 14:35:36',0),('EZORG inloggen webmail: webmail.ezorg.nl ','HOEPpbiggS7UqMe9rsIMHqdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','11qZBy8krE8ETT0SkUAFz8QIC1gjrGWlZjslcv1ucI0=','2019-01-03 12:58:56',0),('EZORG webmail inloggen','d79ixmmqGWKogQvEVqVEWx3WyIuzC73rpB9AoDBehnQ=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','BjeL1/dAI5fS1gc5f945BMQIC1gjrGWlZjslcv1ucI0=','2020-05-13 10:20:20',0),('EZORG webmail inloggen','gPyeSG9Ipoh7YStsCzP1ZAMEkEdqNMMkLMVQjTNogGc=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','BjeL1/dAI5fS1gc5f945BMQIC1gjrGWlZjslcv1ucI0=','2020-05-13 10:21:33',0),('EZORG webmail inloggen assistenteverstappen@ezorg.nl','d79ixmmqGWKogQvEVqVEWx3WyIuzC73rpB9AoDBehnQ=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','BjeL1/dAI5fS1gc5f945BMQIC1gjrGWlZjslcv1ucI0=','2020-07-14 06:17:29',0),('FACEBOOK Facebook','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','0eTmBaW+n+UqZhISEG99rsQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:31:28',0),('Faxhuisartsvanmuiden@ezorg.nl','R+aOgWHSpQhg3sGLVtHwx+OHejwEqa4YAiYo7M2ze+c=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','qr9JKcXPDJN912zeM96/w8QIC1gjrGWlZjslcv1ucI0=','2020-08-05 10:38:10',0),('financieelhuisartsvanmuiden@ezorg.nl webmail','ouRlBhTJs+ukpbCXkpyKC1rm3XT2Ci0oGjdPB0sMx7fftXmtM9F/q2gtYVWzG3kaxAgLWCOsZaVmOyVy/W5wjQ==','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Ppx0dnU8vqcflX6MjbMgt8QIC1gjrGWlZjslcv1ucI0=','2021-03-14 16:09:59',0),('Flevo-landschap.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','hYfTozpCTlqM6eYkzHpbjsQIC1gjrGWlZjslcv1ucI0=','2020-06-30 21:00:59',0),('Flitsmeister','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','12V+a+WRzqzL8fYDQ5vSW8QIC1gjrGWlZjslcv1ucI0=','2020-10-17 10:53:17',0),('Frascati','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','NpeOEfmczf8bZ0YSWPqYjcQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:39:29',0),('FTO https://medicijngebruik.nl/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','WiykknJf8lQChVXziukKrcQIC1gjrGWlZjslcv1ucI0=','2018-12-24 09:59:15',0),('FTO Online','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','2cSWc7go4l4A44un3X/pmcQIC1gjrGWlZjslcv1ucI0=','2019-02-06 21:19:26',0),('GAIA https://www.pe-online.org/SPE001_PR_Inloggen.aspx?taalID=&Calenda','LKE3y3bYkczKNel+gcY9oMQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','BAZ8ZV8ts2j/UdGoX+e6HsQIC1gjrGWlZjslcv1ucI0=','2022-05-26 13:07:07',0),('GAIA https://www.pe-online.org/SPE001_PR_Inloggen.aspx?taalID=&Calenda','LKE3y3bYkczKNel+gcY9oMQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','kKDn0nzDG62hRe/7AEObXMQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:47:57',0),('gall gall','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Yi8zGSazbRmC3C6YzOWWXMQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:08:23',0),('Gast guest login','C5bsgnevJhd0KixHJ8MpPsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','qaoGw0tRdXKlSDalu6wmMsQIC1gjrGWlZjslcv1ucI0=','2021-02-01 21:49:20',0),('Geneeskunde boek.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','j07JO7UCvPdpu0pfwoLRuMQIC1gjrGWlZjslcv1ucI0=','2021-02-07 13:30:10',0),('Geneeskundeboek.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','SaWegc7+V3f8RdU1Xm1zERqsh0Qm5wGefqfUsyaLUk4=','2018-12-17 21:19:48',0),('GHO GO https://www.ghogo.nl/wp-login.php','vpyaiQpxeBeYpZoySiHlLsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','1O+W3zWJgeTT2cBTKHh47dSCszqn35d+8g048wX8XU0=','2018-12-17 20:56:29',0),('GhoGo.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','deLRYIjhS/sdDZUIzX8TN8QIC1gjrGWlZjslcv1ucI0=','2019-11-13 22:37:35',0),('Gmail inloggen','OiWgwprPBJVK2CrBazS96sIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','lNwYmoFY70xMf36tKkwaKcQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:04:26',0),('Gold card','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','FXh79Z8l+p1pt5XZj1gQxktEbZjehbLOVq6Vxcs7DtE=','Z+VtQk1s6Ni4aGarX3h9MvwLNPRV4u37AsHlF1OXHd4=','2021-01-25 18:42:58',0),('Google','OiWgwprPBJVK2CrBazS96sIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','lNwYmoFY70xMf36tKkwaKcQIC1gjrGWlZjslcv1ucI0=','2019-06-17 19:00:45',0),('Google','OiWgwprPBJVK2CrBazS96sIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','yGKNzfQgpiD3nOdbh9zC/MQIC1gjrGWlZjslcv1ucI0=','2020-03-22 13:46:51',0),('Groene Amsterdammer','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','/Ga321BGrsvPsD178mXJ1MQIC1gjrGWlZjslcv1ucI0=','2020-04-24 14:55:39',0),('Groupon','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','iIyEZQv3UZ4abOd4iMtPo8QIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:44:02',0),('HAWEB','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','zX9d0I/cOPQqk1Yvo/2LncQIC1gjrGWlZjslcv1ucI0=','2018-12-24 11:02:42',0),('HAWEB','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','7QfTE/2gR4LLWXkjFnIZPsQIC1gjrGWlZjslcv1ucI0=','2022-12-14 06:05:30',0),('Health Investment https://www.lpx.nl/healthinvestment/login','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','AbAMyaohBjb+JEAF3M1vMou0U2chKy537NFX3s6MOaQ=','2018-12-17 21:54:12',0),('Hema.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','4My42ow2H6LRcNlw6Ycmm8QIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:56:30',0),('Hema.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','QYasv09nfqbjwXfJiAyM1sQIC1gjrGWlZjslcv1ucI0=','2019-08-25 10:51:14',0),('Herensokken.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Us7qKjdijgl2LGmVtVxvB9XtNNrF9e+NBtMmfhdFqfM=','2018-12-24 10:50:22',0),('Hopin.com','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','VF5c5GuAakw8yi2YenkeV8QIC1gjrGWlZjslcv1ucI0=','2021-10-05 16:44:07',0),('Hopir','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','IA1oUZdXzcHc0TIL8bPzmsQIC1gjrGWlZjslcv1ucI0=','2019-04-25 08:25:58',0),('https://branderwines.nl/wijnshop/customer/account/login/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Z6eW+sD+Af9enP6znoqUpsQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:26:00',0),('Https://covid19.u-diagnostics.com','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','CYG3Yudm1Wi5+ssEuUdHC8QIC1gjrGWlZjslcv1ucI0=','2020-04-07 14:45:35',0),('https://en.lespassionnesduvin.com/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','YfF8vwYOq1JkBJKflqwTnsQIC1gjrGWlZjslcv1ucI0=','2023-07-23 15:05:32',0),('https://gegevensportaal.belastingdienst.nl','BUGINflk6CPLgLK+a1zC+cQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','/PMRWiRcyBauTOJqGSpV4sQIC1gjrGWlZjslcv1ucI0=','2023-02-02 09:25:35',0),('https://landelijkeleeromgeving.nspoh.nl/local/nspoh_register/signup.ph','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','xUguyDh/ogVDVlHq5B+4M8QIC1gjrGWlZjslcv1ucI0=','2021-01-14 15:52:22',0),('https://login.ns.nl/login NS','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Ae/ljDkemO5zi1m8xrZKIsQIC1gjrGWlZjslcv1ucI0=','2019-04-05 11:07:55',0),('https://login.ns.nl/login NS','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','HRUSji26KUFKkmuRE1U8m8QIC1gjrGWlZjslcv1ucI0=','2021-05-24 13:21:27',0),('https://loket.loket.nl werkgevers loket','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','L9m3wPOFL2mXi9Li1pD+l8QIC1gjrGWlZjslcv1ucI0=','2023-02-02 14:52:33',0),('https://medicijngebruik.nl/ verandwoord medicijngebruik','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','WiykknJf8lQChVXziukKrcQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:35:40',0),('https://mijn.belastingdienst.nl/ppa/ belastingdienst janine zakelijk','lsvlcTwK3KgOr4G5/9HaU8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Wyb441YBuGaKLz0AhQOgSi1HLuHXnfPEhB+zlu789sg=','2018-11-10 22:12:34',0),('https://mijn.bsl.nl/nascholing','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','byIdVACj4xZdJwrLikkfesQIC1gjrGWlZjslcv1ucI0=','2018-11-10 21:50:02',0),('https://mijnhypotheek.lloydsbank.nl/hypotheek','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','uL9VK59KLTZvThsVa5yocMQIC1gjrGWlZjslcv1ucI0=','2020-07-09 12:33:55',0),('https://mijnoproep.sanquin.nl/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','glJCJxownqzATH5mmKAJs8QIC1gjrGWlZjslcv1ucI0=','2022-06-15 16:07:04',0),('https://online.loket.nl/vso.prd.loket werkgevers loket','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','L9m3wPOFL2mXi9Li1pD+l8QIC1gjrGWlZjslcv1ucI0=','2021-03-11 15:21:10',0),('https://open.viadesk.com/do/portal','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','VkwhTYZrJs/3//ox81I1ZsQIC1gjrGWlZjslcv1ucI0=','2021-05-11 17:26:35',0),('Https://Promedico.topdesk.net','0XafPE8i8PfGStzof2KVZcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','BjeL1/dAI5fS1gc5f945BMQIC1gjrGWlZjslcv1ucI0=','2020-06-19 14:58:02',0),('https://waarneemapp.nl/companies/4708/schedules/openshifts','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','88WWRIQoUDZah7Le1QOF9cQIC1gjrGWlZjslcv1ucI0=','2023-01-26 15:46:15',0),('https://www.ah.nl/kies-moment/bezorgen albert heijn','HOEPpbiggS7UqMe9rsIMHqdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','27+tHDtbRZovbv/ccJUwX8QIC1gjrGWlZjslcv1ucI0=','2018-12-17 20:52:09',0),('https://www.ah.nl/kies-moment/bezorgen/1398BE albert heijn','HOEPpbiggS7UqMe9rsIMHqdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','27+tHDtbRZovbv/ccJUwX8QIC1gjrGWlZjslcv1ucI0=','2018-11-10 21:52:31',0),('https://www.america-today.com','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','yWkKHjKKYAcrw3MJyz6vysQIC1gjrGWlZjslcv1ucI0=','2023-03-28 15:38:35',0),('https://www.bambooimport.com','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','870XYsPD13vC05fomohEwsQIC1gjrGWlZjslcv1ucI0=','2020-10-01 20:22:00',0),('https://www.centraalbeheer.nl/Paginas/default.aspx Centraal beheer','zaYhHpQTMW9DpMb90LHnUcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','sKc+1tx1Cc6Ehe3skHidgsQIC1gjrGWlZjslcv1ucI0=','2018-11-10 22:18:32',0),('https://www.daxtrio.nl/customer/account/login/ DAXTRIO','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','3VzC046+Dxlkpg4Rk0CZKMQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:17:04',0),('https://www.daxtrio.nl/customer/account/login/ DAXTRIO','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','UOhu+NUg7JB2FuowZwXEeMQIC1gjrGWlZjslcv1ucI0=','2021-05-02 20:43:22',0),('https://www.dokterandrebeautyworld.nl/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Pk5imueoM2Hxq2A63IkKXMQIC1gjrGWlZjslcv1ucI0=','2020-11-09 22:14:11',0),('https://www.etos.nl/ ETOS','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Kd4/lkaioz/wAnrkzlRgRsQIC1gjrGWlZjslcv1ucI0=','2018-11-10 22:02:54',0),('https://www.familienet.nl/client/katja-suy-linders/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','l/AK7c0J3gheHEiqirtDiMQIC1gjrGWlZjslcv1ucI0=','2021-09-12 10:54:13',0),('https://www.ghogo.nl/wp-login.php GHOGO','vpyaiQpxeBeYpZoySiHlLsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','1O+W3zWJgeTT2cBTKHh47dSCszqn35d+8g048wX8XU0=','2018-11-10 21:58:46',0),('https://www.gowah.nl/default.htm','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','7anbD0i5+1UvI+7E/4eXdMQIC1gjrGWlZjslcv1ucI0=','2022-02-22 15:13:00',0),('https://www.milieubarometer.nl/csr/o/zhjws/i/88566/y1/n/0/','171bvJWqcI8vciGTUNCMFsIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','fehcGgbEv27Xku5yZQWeh8QIC1gjrGWlZjslcv1ucI0=','2022-12-29 18:37:12',0),('https://www.myheritage.nl/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','PDPBqumf7LawTcmHY3sEpsQIC1gjrGWlZjslcv1ucI0=','2018-12-17 20:48:52',0),('https://www.neleman.org','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','OYoapdQgrkOvqVxgJjBa18QIC1gjrGWlZjslcv1ucI0=','2022-02-17 12:06:37',0),('https://www.pil-nascholing.nl','LR2F64IuOKDdJ8phH+dSi8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','RWmWsyIZhc681VIeYORwe8QIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:44:47',0),('https://www.pil-nascholing.nl','He3riWTVexIwmQuaHE/u5MQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','6XWM/f2rUvlPC3eOIXXIC8QIC1gjrGWlZjslcv1ucI0=','2020-12-20 21:06:49',0),('https://www.supersaas.nl/schedule/login/hartforherAlmere/hart_for_her_','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','KrLsv4GOndaIUo98xCSrQcQIC1gjrGWlZjslcv1ucI0=','2021-06-21 18:44:57',0),('https://www.teunstuinposters.nl/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','9uM5Hu8GDXzE2QCc3s1LwMQIC1gjrGWlZjslcv1ucI0=','2021-03-28 10:10:53',0),('Https:/portaal.zorgvandezaak.nl/login','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','q+UoDdllxeDM3cpCJQevc8QIC1gjrGWlZjslcv1ucI0=','2022-11-25 11:13:42',0),('Hudson Bay','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','51GccCR2ZqQ2xPT9Z7SuY8QIC1gjrGWlZjslcv1ucI0=','2019-04-04 17:49:20',0),('Huisarts Vandaag','OMjUc+58uNzMr+wRSjj8HcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','YggS9FthqXMUqsceMZ3EN8QIC1gjrGWlZjslcv1ucI0=','2018-12-17 20:46:07',0),('Huisarts.mediq.nl/inloggen Mediq voorschrijfportaal hulpmiddelen','Qvh5XOQZb2UcFYqFGc3ZzVCh3L5dvULzB5f+s0vxviY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','xZeLDnM88rm08dzSpjqLoMQIC1gjrGWlZjslcv1ucI0=','2020-12-21 07:39:17',0),('huisartsvanmuiden@ezorg.nl webmail ','Tm4d/fIAc5LgqRPL0b0ufITH5cPh2nZ8GPKeNCQSnlc=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','K1ViAVOCHcc2yJsxwrP0WsQIC1gjrGWlZjslcv1ucI0=','2021-03-14 16:08:45',0),('IC Taurus zelfservice portaal','ozaZ/7jVfPMYkErqm4Iv/IrwMqbUoIlZq6ec7YYvD5E=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','OqsP5hH+ZMKWJRBZvEq98MQIC1gjrGWlZjslcv1ucI0=','2019-06-03 07:24:52',0),('Iens Seatme','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','8BIBg6Sg5tLsO0lyAMZrscQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:06:57',0),('Ignace tel ontgrendelen','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','WNq3+exR10kwq0t8YsaSnMQIC1gjrGWlZjslcv1ucI0=','2023-04-30 19:17:14',0),('ignaceontgrendelingtelefoon','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','9mZYgKRDVPRFEqt8SP3BA8QIC1gjrGWlZjslcv1ucI0=','2022-09-11 09:11:13',0),('IMDB','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','rsu7Y0ULbd/oGW7in7mihcQIC1gjrGWlZjslcv1ucI0=','2022-01-01 20:05:41',0),('Independer','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','1CHBvaJpyUgIqppBwW+yE8QIC1gjrGWlZjslcv1ucI0=','2018-11-10 22:21:16',0),('Independer','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','PV5EjGuZAnDWtYuf45AoQsQIC1gjrGWlZjslcv1ucI0=','2022-12-06 16:42:45',0),('Inlog praktijk start scherm','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','ZeazV11fVEX2Yzn89L0BC8QIC1gjrGWlZjslcv1ucI0=','2019-09-23 11:25:40',0),('Inlog praktijk start scherm','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','wV2U4Y2KD7EllYuRtf/l+sQIC1gjrGWlZjslcv1ucI0=','2021-03-15 13:26:50',0),('Inlog praktijk start scherm','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','rrlfKuCVBkXPy8xDQhpgIcQIC1gjrGWlZjslcv1ucI0=','2021-07-14 05:54:56',0),('Inlog praktijk start scherm bureaublad','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','DvycyXTJyJtmWsogjgT7o8QIC1gjrGWlZjslcv1ucI0=','2021-11-12 06:52:23',0),('Inlog praktijk start scherm bureaublad','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','yPptBuPmMSjzyfL1SZI5qcQIC1gjrGWlZjslcv1ucI0=','2022-03-28 05:58:09',0),('Inlog praktijk start scherm bureaublad','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','EOe+fFL/pN1XKyChVNL8YMQIC1gjrGWlZjslcv1ucI0=','2022-07-26 12:58:56',0),('Inlog praktijk start scherm bureaublad desktop','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','EOe+fFL/pN1XKyChVNL8YMQIC1gjrGWlZjslcv1ucI0=','2022-07-26 12:59:17',0),('Inlog praktijk start scherm bureaublad desktop','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','EOe+fFL/pN1XKyChVNL8YFB6K+XYSLzQ+cCS0dH4Q+g=','2023-03-27 05:44:41',0),('Inlog praktijk start scherm bureaublad desktop','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','EOe+fFL/pN1XKyChVNL8YF9Q3ELjRoqaz5pcMt62YbQ=','2023-07-25 10:34:15',0),('Inlog praktijk start scherm bureaublad desktop','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','EOe+fFL/pN1XKyChVNL8YF9Q3ELjRoqaz5pcMt62YbQ=','2023-07-25 10:35:26',0),('Inlog praktijk startscherm bureaublad','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','yPptBuPmMSjzyfL1SZI5qcQIC1gjrGWlZjslcv1ucI0=','2022-03-29 05:49:06',0),('Inlog praktijk startscherm bureaublad','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','EOe+fFL/pN1XKyChVNL8YL/9PXOxAz3Haz6ZNhSGiuw=','2022-11-25 07:01:05',0),('Instituut verantwoord medicijn gebruik IVM','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','XIdZ6IadVN29rI/aTgnXEcQIC1gjrGWlZjslcv1ucI0=','2019-05-16 14:54:02',0),('intershift','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','5nWVMFjJTO6Tt0cTnmNMgMQIC1gjrGWlZjslcv1ucI0=','2021-02-18 11:45:43',0),('intershift','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','vKQj/CtdHKbbmBXJkQ9xb8QIC1gjrGWlZjslcv1ucI0=','2023-02-12 11:22:35',0),('ISSUU','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','LEXGNUVG0m8tGMiciRxsBcQIC1gjrGWlZjslcv1ucI0=','2020-04-13 17:02:19',0),('Joviene Lourens Massage','p4L/OpzdwnPhj2S/DMR0mcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','3JxAJiIBKWJSpWla6TrJasQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:59:48',0),('Kinepolis.nl bioscoop','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','PFe+g/2QBQQ2mitfVmF1x8QIC1gjrGWlZjslcv1ucI0=','2021-10-03 07:36:50',0),('komoot.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+DLLL0uL6sPlHtQBshNn2cQIC1gjrGWlZjslcv1ucI0=','2023-03-08 07:55:02',0),('koopjedeal','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','kUx6NzXE/UKvdqHtAgduCcQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:55:23',0),('KPN https://account.kpn.com/#/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','7z0iqv0y/7mNCiFOganxc8QIC1gjrGWlZjslcv1ucI0=','2018-12-16 15:20:55',0),('KPN https://account.kpn.com/#/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Ka+bTi//b6vXusHvSovnOcQIC1gjrGWlZjslcv1ucI0=','2019-04-23 18:58:36',0),('KPN https://account.kpn.com/#/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','O7pROptgcEn3AcgYAb2yzsQIC1gjrGWlZjslcv1ucI0=','2020-10-16 11:11:06',0),('KPN https://account.kpn.com/#/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','O7pROptgcEn3AcgYAb2yzsQIC1gjrGWlZjslcv1ucI0=','2020-10-16 11:11:26',0),('KPN https://account.kpn.com/#/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','hT+W8bro8IvIWvj9Pbxue8QIC1gjrGWlZjslcv1ucI0=','lcp1Goe0efizItuRzCqP+cQIC1gjrGWlZjslcv1ucI0=','2020-10-18 09:13:52',0),('KPN https://account.kpn.com/#/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','hT+W8bro8IvIWvj9Pbxue8QIC1gjrGWlZjslcv1ucI0=','O7pROptgcEn3AcgYAb2yzp2feXDEKWuOlKcaWU1e0Hw=','2021-04-13 14:59:17',0),('KPN https://account.kpn.com/#/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','hT+W8bro8IvIWvj9Pbxue8QIC1gjrGWlZjslcv1ucI0=','KJczJXNbYJxOkv5zlMAMjZ2feXDEKWuOlKcaWU1e0Hw=','2022-03-03 20:49:05',0),('KRUIDVAT','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','miSim+e1TTVkClOpjt5tn8QIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:09:51',0),('Lantel cliud','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','sSU1/ANoAF880IH/fyhS9BoZiHkPxc60rCR+KNM9S10=','2019-08-14 15:26:51',0),('Lantel cloud','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','sSU1/ANoAF880IH/fyhS9BoZiHkPxc60rCR+KNM9S10=','2019-08-18 12:23:36',0),('Lantel cloud','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','GmxImT69TBrLccMrN8BTeMQIC1gjrGWlZjslcv1ucI0=','2020-11-10 06:53:35',0),('Lanteltelefooninlogstoring','LLy/uB9hTFmICu8ZHEO1I2P/OwDZxfpYEnd3I7w3hso=','q+09JYt2M4x1ZsAL7iQSbcQIC1gjrGWlZjslcv1ucI0=','vsa9JAQhnzGEjeF6auj/gcQIC1gjrGWlZjslcv1ucI0=','2020-11-02 11:36:49',0),('Leeg worddocument','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','sKhLvSLaPbxrKW/psxa9Z8QIC1gjrGWlZjslcv1ucI0=','5fWXyuDLDPmEGnSbS7mTzAwXzz6LDhDa0Rcggbl3Nms=','2021-01-07 10:15:58',0),('LHV panel','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','9T4uAiOQgNoJB41EcV/8J8QIC1gjrGWlZjslcv1ucI0=','2020-10-30 19:05:34',0),('Linda TV','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','mzV1xN8N6mtofDOU1i0L/MQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:21:06',0),('LinkedIn','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','3pHLdG4ZXNQo9s9kjhIQzcQIC1gjrGWlZjslcv1ucI0=','2018-12-16 15:01:22',0),('LinkedIn','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','GOBkmfyKpsCyW2bfmeuTysQIC1gjrGWlZjslcv1ucI0=','2018-12-17 22:01:13',0),('Login.WeSeeDo.nl','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','8qPabDt0LsLqtsJp4F8t88QIC1gjrGWlZjslcv1ucI0=','2021-02-01 08:20:15',0),('Loonheffing praktijk Belastingdienst Postbus 8738 4820 BA BREDA','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','pI6C3OWWhlSfG3inefH7Y8QIC1gjrGWlZjslcv1ucI0=','2023-01-18 17:02:51',0),('Love For Rain https://www.loveforrain.nl/','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+67XConzVnyu7toYdO55JcQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:10:51',0),('mail inlog mijndomijn janine@demaat.info','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','V/6Q1YpZzYXP7WO7oTQzTsQIC1gjrGWlZjslcv1ucI0=','2021-03-24 17:38:57',0),('mail inlog mijndomijn janine@demaat.info','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','1nx9fR0pXHPWYSkm+7X6T8QIC1gjrGWlZjslcv1ucI0=','2021-05-03 20:03:38',0),('Makro','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','dr2RlpVecF4TL9Kd+Ie3asQIC1gjrGWlZjslcv1ucI0=','2019-05-28 15:04:16',0),('Managemenstboek','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','AIuboRzeJ4Y/hOtboz6UQMQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:17:54',0),('Marktplaats.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','eFahnMBp7z3WqIoKx+HBcf11BaLELFXtENq0doQC+Hk=','2019-04-28 14:04:39',0),('Mcc gooi en Vechtstreek','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','KSm3HFmy6oql99h9G6DvDMQIC1gjrGWlZjslcv1ucI0=','2020-10-29 15:36:30',0),('Medfeed','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','qM3PdttdkBW7cuWDdX/FusQIC1gjrGWlZjslcv1ucI0=','2022-02-20 15:50:29',0),('MedGemak','9oGbuztjSVdgwEnaghcKVsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+BrO8wwfZd0ExayMHhOWzMQIC1gjrGWlZjslcv1ucI0=','2020-03-03 09:12:38',0),('MedGemak+','9oGbuztjSVdgwEnaghcKVsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+BrO8wwfZd0ExayMHhOWzMQIC1gjrGWlZjslcv1ucI0=','2022-10-04 08:45:12',0),('Medi-access','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','/PKf66oXphpMoazqJkziUcQIC1gjrGWlZjslcv1ucI0=','2021-02-28 17:08:18',0),('Media Markt','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','bQpdMGxOHAMDZ4SgAWTslj9YTV6FO05cz2NDEHWLekM=','2018-12-24 10:12:49',0),('Mediq voorschrijfportaal hulpmiddelen','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Qvh5XOQZb2UcFYqFGc3ZzVCh3L5dvULzB5f+s0vxviY=','2020-12-18 10:10:24',0),('Mediq.nl','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','BKEPSbx2K5/+I0NZSNuexcQIC1gjrGWlZjslcv1ucI0=','2020-05-01 12:35:32',0),('Mediq.nl','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Nweqw7C0dM9f12BjWo7gzMQIC1gjrGWlZjslcv1ucI0=','2020-05-04 05:47:30',0),('Medisch Contact','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','nqyUMVLdwxhJUCRo5x1h9MQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:51:18',0),('Medisch contact','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','u1gki/dMWigwS6yx79yn6MQIC1gjrGWlZjslcv1ucI0=','2020-10-25 14:41:46',0),('Medischescholing.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','Z1EIutuc26Til4WES0W4q8QIC1gjrGWlZjslcv1ucI0=','2020-03-16 19:04:24',0),('Medischescholing.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','0zVgV5E/dl9ntm/sGrHXfcQIC1gjrGWlZjslcv1ucI0=','2020-05-12 18:19:45',0),('Microsoft Teams.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','B3tnf+GkJanesOGctTgdocQIC1gjrGWlZjslcv1ucI0=','2021-10-03 11:34:47',0),('Mijn lcr inloggen','BBb3X6ZGAf+t1b4Q5zPFqcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','7DLGDatXAL95wIKpybUOHMQIC1gjrGWlZjslcv1ucI0=','2019-04-29 21:54:01',0),('Mijn Promedico','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','lV7/vlMJyV8NzEmxUDi+qMQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:25:20',0),('Mijn.euronature.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','CqACmxR0WjdJCBCLI9wd3cQIC1gjrGWlZjslcv1ucI0=','2020-09-03 08:34:35',0),('Moby parkeren','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','6TY3TYqzPxnNk58vmUMigsQIC1gjrGWlZjslcv1ucI0=','2022-05-08 08:48:10',0),('Moby parkeren','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','6TY3TYqzPxnNk58vmUMigsQIC1gjrGWlZjslcv1ucI0=','2022-05-08 08:48:19',0),('Movir https://mijnmovir.nl/MyMovirTheme/NoPermission.aspx','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','vCJOdfQoumUYHSyh7DCoCsQIC1gjrGWlZjslcv1ucI0=','2018-11-10 22:16:03',0),('Movir https://mijnmovir.nl/MyMovirTheme/NoPermission.aspx','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','UV5wHubpyiwZfDPsrqrzn8QIC1gjrGWlZjslcv1ucI0=','2020-11-26 10:19:09',0),('Movir https://mijnmovir.nl/MyMovirTheme/NoPermission.aspx','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','S7sNHsHcdYgslg8lRCJxWMQIC1gjrGWlZjslcv1ucI0=','2022-02-15 15:43:16',0),('Movir https://mijnmovir.nl/MyMovirTheme/NoPermission.aspx','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','GWiL/yuAHQbXWpYPpqDTYMQIC1gjrGWlZjslcv1ucI0=','2023-02-26 14:07:45',0),('Muidernieuws online lezen','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','86kip7+amgR8MZGf8ZJlzMQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:18:30',0),('Muidernieuws online lezen','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','EeexfqBK7Wzb0iz7mSmX8cQIC1gjrGWlZjslcv1ucI0=','2022-07-06 21:27:18',0),('Museumkaart','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','RdNVDbtXgYf97GtMy3g8oMQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:19:57',0),('MX-5 Iwners','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','rr5xtm+YDkwCvyyHVlzjZMQIC1gjrGWlZjslcv1ucI0=','2019-11-03 10:15:53',0),('MX-5 Owners','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','rr5xtm+YDkwCvyyHVlzjZMQIC1gjrGWlZjslcv1ucI0=','2019-11-03 10:16:44',0),('My Heritage','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','PDPBqumf7LawTcmHY3sEpsQIC1gjrGWlZjslcv1ucI0=','2018-11-10 21:47:58',0),('nationale nederlanden nn.nl --&amp;gt; ZAKELIJK!','69UlvS0VJnYvzAkesQnQE8QIC1gjrGWlZjslcv1ucI0=','69UlvS0VJnYvzAkesQnQE8QIC1gjrGWlZjslcv1ucI0=','WLUGk6lxJx4y4O6AKm+bMMQIC1gjrGWlZjslcv1ucI0=','2023-01-09 16:27:05',0),('nationale nederlanden nn.nl --&gt; ZAKELIJK!','69UlvS0VJnYvzAkesQnQE8QIC1gjrGWlZjslcv1ucI0=','fN2tOqsGFXF+3nQOhqC4t96RyVekCFwjRVUDAt+cQpc=','+HIZO6yGDqEJishXUCgVVfB/9v8d+zk2c4Z7cHDJhLs=','2020-04-12 11:17:15',0),('nationale nederlanden nn.nl --> ZAKELIJK!','69UlvS0VJnYvzAkesQnQE8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','j5896gxw6ai8W7Pn/8/lb8QIC1gjrGWlZjslcv1ucI0=','2019-07-11 12:06:38',0),('nationale nederlanden nn.nl --> ZAKELIJK!','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','j5896gxw6ai8W7Pn/8/lb8QIC1gjrGWlZjslcv1ucI0=','2019-11-28 11:20:37',0),('nationale nederlanden nn.nl --> ZAKELIJK!','69UlvS0VJnYvzAkesQnQE8QIC1gjrGWlZjslcv1ucI0=','Mi+wu3OJeVKLlSuB1vTDo4rwMqbUoIlZq6ec7YYvD5E=','j5896gxw6ai8W7Pn/8/lb8QIC1gjrGWlZjslcv1ucI0=','2019-11-28 12:07:53',0),('nationale nederlanden nn.nl --> ZAKELIJK!','fKDB+YQ5bVg5CQ2MuuUiecQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','GKCStgUPe82iTTfYCA9qL5er7Lulu3PpV4EDgmIJ+mY=','2019-01-03 12:48:28',0),('Natuurmonumenten','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','77CY4KXhMU/82YsYNlwoICinHFkV/URuCsddyz65Apw=','2020-10-15 13:37:03',0),('Nespresso','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','aTVSlml8d2BTt7VgckNjpMQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:52:06',0),('Nextdoor','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','pH7zUJT8Ut06lvUsa4Mkd9A5S6MpBY16YxXw+4p9HvI=','2018-12-24 10:18:52',0),('Nextdoor','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','eIMoaA5JxWiZx1NxCRaT3cQIC1gjrGWlZjslcv1ucI0=','2019-11-14 17:22:23',0),('NHG.org','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','zX9d0I/cOPQqk1Yvo/2LncQIC1gjrGWlZjslcv1ucI0=','2018-12-16 15:13:50',0),('Notaris unie','Ja98eDQxnwyoCDh8DHK2LuuvsTmbfCp2WAOORuRVzgE=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','/TtSLKz9w+OQUmQ+P7OX28QIC1gjrGWlZjslcv1ucI0=','2019-03-25 19:19:31',0),('Notaris unie 2','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','6zJ1+gqKqLw9yjDp+0HvHsQIC1gjrGWlZjslcv1ucI0=','2019-03-25 19:28:01',0),('NPA Vincent','171bvJWqcI8vciGTUNCMFsIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+HIZO6yGDqEJishXUCgVVV27+RNaIrmZ6NjDR16nc+M=','2020-05-01 11:35:20',0),('NPA Vincent','171bvJWqcI8vciGTUNCMFsIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+HIZO6yGDqEJishXUCgVVQMtFFQ+Y8Je/8mO93FLT/U=','2020-05-01 11:35:47',0),('NPA Vincent','171bvJWqcI8vciGTUNCMFsIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+HIZO6yGDqEJishXUCgVVQbORIH5LeM5I9ku4w9tSmo=','2020-10-15 16:06:47',0),('NPA Vincent','171bvJWqcI8vciGTUNCMFsIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+HIZO6yGDqEJishXUCgVVYxTsT0lm6HXq6lQT/k4Hy8=','2020-12-23 13:32:52',0),('NPA Vincent','171bvJWqcI8vciGTUNCMFsIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','YIIzUIWZ2wFfFOk+FhIcqsQIC1gjrGWlZjslcv1ucI0=','2021-08-03 08:33:23',0),('NPAweb.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Cb08Bry2PJhe9KHEmlI5yMQIC1gjrGWlZjslcv1ucI0=','2020-04-28 19:48:24',0),('NPAweb.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','4OaFnmkqT0GRxcX3V9aREcQIC1gjrGWlZjslcv1ucI0=','2020-08-22 12:24:19',0),('NPAweb.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','sMuAQ2pHtguJktgDRPMrt8QIC1gjrGWlZjslcv1ucI0=','2020-12-23 12:41:39',0),('NPAweb.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','VDwxhmzn0ssNx8fk1M7M4sQIC1gjrGWlZjslcv1ucI0=','2021-06-23 10:57:36',0),('NPAweb.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','VDwxhmzn0ssNx8fk1M7M4r/9PXOxAz3Haz6ZNhSGiuw=','2022-06-13 13:33:10',0),('NPO start','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','o0iSB5fArgUXf1wD+/nyO8QIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:13:09',0),('NTVG inloggen','vpyaiQpxeBeYpZoySiHlLsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','LqUUq5VxVfnZ0eiWAyygXsQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:34:45',0),('NVDA','HOEPpbiggS7UqMe9rsIMHqdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','TdDC/jgNBLCV/NOlE9p49qoLXTto0TVL+e01xkYFQaY=','2018-11-10 21:43:50',0),('NVDA','HOEPpbiggS7UqMe9rsIMHqdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','TdDC/jgNBLCV/NOlE9p49qoLXTto0TVL+e01xkYFQaY=','2018-12-17 20:46:56',0),('Omzetbelasting nummer (ob-nummer)','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','wMeUDBDJzxFGJxDb6LgC5cQIC1gjrGWlZjslcv1ucI0=','2019-10-31 15:41:01',0),('Online Bibliotheek.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','i2iBud9NNz01HUeh0fpvsg+eyurg5GqRuVT0D/WI/JU=','2018-12-17 21:33:38',1),('onlinebibliotheek.nl','3P1kIjt5gZv5NIdO/uQ08cQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','rJIdcD3SJ1FFcATmYCrmKcQIC1gjrGWlZjslcv1ucI0=','2020-09-03 13:54:23',0),('Open','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','VkwhTYZrJs/3//ox81I1ZsQIC1gjrGWlZjslcv1ucI0=','2020-04-23 16:36:21',0),('Overheid berichtenbox app','9oGbuztjSVdgwEnaghcKVsQIC1gjrGWlZjslcv1ucI0=','9oGbuztjSVdgwEnaghcKVsQIC1gjrGWlZjslcv1ucI0=','gZhyTmUJsR9AOQKxay+UkMQIC1gjrGWlZjslcv1ucI0=','2019-02-14 18:48:23',0),('Owncloud https://www.suy.nu/cloud','d7FlJoA5ecCu56+VxqkEdcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','BnO0ufc2LDsDxPA5kvRLj810Q8QlW5UDARawz/akqKI=','2021-03-26 20:27:19',0),('ParkMobile','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','bgWlnuonfxupVlXq5Ps8s8QIC1gjrGWlZjslcv1ucI0=','2019-03-10 13:29:11',0),('Parool','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','SsmB8IuTz2vbgtlW5zNiOcQIC1gjrGWlZjslcv1ucI0=','2019-05-04 09:46:37',0),('Parool','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','4Nkrg/diAlXDi+RynVUSy8QIC1gjrGWlZjslcv1ucI0=','2020-10-05 17:15:32',0),('Parool','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','NNxyig6XTl/EhudNzQ1AbMQIC1gjrGWlZjslcv1ucI0=','2020-10-29 20:58:54',0),('paspoort Ignace Marie Lucien Suy 12 11 1964','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','tlmWqlNPgeclRBbAiwGH1CT3+0s46TAZAh9/buKp8LM=','fonJbBBFLBTAP4StErJ3OsQIC1gjrGWlZjslcv1ucI0=','2019-10-24 19:02:34',0),('paspoort Janine de Maat 17 05 1967','kl8xgA9jcxtK/B0mFyp4KtIMG31RflO/HpGSruwySO4=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','Z3e9REh3Q7L/LIvuvWMiHcQIC1gjrGWlZjslcv1ucI0=','2019-10-24 19:03:50',0),('persgroep.beleefklassiek.nl','ap5uuoeiCScujhJrNkjaCsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','wKdz6cETnNu290/H3yLHo8QIC1gjrGWlZjslcv1ucI0=','2021-09-18 08:24:54',0),('Pharmeon','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','7DLGDatXAL95wIKpybUOHMQIC1gjrGWlZjslcv1ucI0=','2019-05-28 15:16:58',0),('Pharmeon','171bvJWqcI8vciGTUNCMFsIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','7DLGDatXAL95wIKpybUOHMQIC1gjrGWlZjslcv1ucI0=','2019-05-29 05:55:45',0),('Pharmeon','171bvJWqcI8vciGTUNCMFsIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','tOUatKbdpOZ7kKovMYioj8QIC1gjrGWlZjslcv1ucI0=','2021-01-07 10:14:49',0),('Pharmeon','d79ixmmqGWKogQvEVqVEWx3WyIuzC73rpB9AoDBehnQ=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','LP3xvRwDBb5HhPCJLugMEMQIC1gjrGWlZjslcv1ucI0=','2021-09-07 06:40:54',0),('Pharmeon beheer pagina','d79ixmmqGWKogQvEVqVEWx3WyIuzC73rpB9AoDBehnQ=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','LP3xvRwDBb5HhPCJLugMEMQIC1gjrGWlZjslcv1ucI0=','2021-09-26 15:20:37',0),('Pharmeon beheer pagina','d79ixmmqGWKogQvEVqVEWx3WyIuzC73rpB9AoDBehnQ=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','tOUatKbdpOZ7kKovMYioj8QIC1gjrGWlZjslcv1ucI0=','2022-06-13 10:23:09',0),('Pharmeon beheer pagina','d79ixmmqGWKogQvEVqVEWx3WyIuzC73rpB9AoDBehnQ=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','rScVRu4J7BmGtkGpsYhTGsQIC1gjrGWlZjslcv1ucI0=','2022-07-12 13:26:55',0),('PIM inloggen telefonie huisartsenpost','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','rEHG6E1HYiaVerdwlN03Lbjt8CFY6yP+Mz5yxh2JQ+PwpCOyvv+cvy5hwz/7wuohxAgLWCOsZaVmOyVy/W5wjQ==','84cqL7tZ+M5lh+oMUQosQcQIC1gjrGWlZjslcv1ucI0=','2019-11-10 09:05:22',0),('Pinterest','WmjwGeWJsMsz/XnJwrHuTsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','SP3/aWFXxUs0XnbZW1pnZMQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:13:17',0),('Plex','OiWgwprPBJVK2CrBazS96sIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','LrUGTcNL8fQyYcmKvQrmLcQIC1gjrGWlZjslcv1ucI0=','2019-02-03 21:44:47',0),('Post.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','apOD8Vwdz64w0gtiECKyHcQIC1gjrGWlZjslcv1ucI0=','2019-02-07 17:48:39',0),('Praktijkspiegel https://vektis.okta-emea.com/login/login.htm?fromURI=/','55+qd52AvLi7Np275eJcBbvYyuag+8/wFcnUauXGjn0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','9udi8goEsJrQaqB6xlFa68QIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:01:52',0),('Praktijkspiegel https://vektis.okta-emea.com/login/login.htm?fromURI=/','55+qd52AvLi7Np275eJcBbvYyuag+8/wFcnUauXGjn0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','D+Gepaz1aqQ5Ci/Jm5HOXsQIC1gjrGWlZjslcv1ucI0=','2022-01-28 12:32:40',0),('Praktijkspiegel https://vektis.okta-emea.com/login/login.htm?fromURI=/','55+qd52AvLi7Np275eJcBbvYyuag+8/wFcnUauXGjn0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','ECB4ptlj0DOud1QWkrTKY8QIC1gjrGWlZjslcv1ucI0=','2022-10-13 10:31:44',0),('Praktijkspiegel https://vektis.okta-emea.com/login/login.htm?fromURI=/','55+qd52AvLi7Np275eJcBbvYyuag+8/wFcnUauXGjn0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','LLYW8T+8IVlt2FeyOUnD58QIC1gjrGWlZjslcv1ucI0=','2023-06-14 19:18:40',0),('Praxisdienst.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','GTcdc07dcil64QPu5npg46oCeqDfe4wtBxs+gNr9n+E=','2018-12-17 21:40:06',0),('Primair Huisartsenpost','vpyaiQpxeBeYpZoySiHlLsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','5nWVMFjJTO6Tt0cTnmNMgMQIC1gjrGWlZjslcv1ucI0=','2018-12-24 11:03:51',0),('Primair Huisartsenpost','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','vpyaiQpxeBeYpZoySiHlLsQIC1gjrGWlZjslcv1ucI0=','5nWVMFjJTO6Tt0cTnmNMgMQIC1gjrGWlZjslcv1ucI0=','2020-08-23 10:38:30',0),('primus internet','qaoGw0tRdXKlSDalu6wmMsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','qaoGw0tRdXKlSDalu6wmMsQIC1gjrGWlZjslcv1ucI0=','2019-04-04 09:19:52',0),('Promedico dongel wrnarts','OC77g9RsFERh3863eHsfOsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','rdFD4yCcCQUE7LZZ54/DoMQIC1gjrGWlZjslcv1ucI0=','2021-07-30 06:17:52',0),('Promedico.topdesk.net','0XafPE8i8PfGStzof2KVZcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','WmYCLsaa5R6TEqEkyqePyMQIC1gjrGWlZjslcv1ucI0=','2020-07-28 11:32:25',0),('Promedico.topdesk.net zelfservice portaal','0XafPE8i8PfGStzof2KVZcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','WmYCLsaa5R6TEqEkyqePyMQIC1gjrGWlZjslcv1ucI0=','2021-05-02 18:03:37',0),('Promedico.topdesk.net zelfservice portaal selfservice ','0XafPE8i8PfGStzof2KVZcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','WmYCLsaa5R6TEqEkyqePyMQIC1gjrGWlZjslcv1ucI0=','2023-03-01 13:11:37',0),('Rhogo.qarebase.nl/account/login','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','ecqd0Ls1omfPqhgEdYUlTMQIC1gjrGWlZjslcv1ucI0=','2020-06-30 17:50:46',0),('Richtlijnendatabase.nl','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','BQzztwSYijRqBbv3P+0bf8QIC1gjrGWlZjslcv1ucI0=','2020-06-19 13:34:12',0),('Secundum WIFI guests','znKxNGski8yyfGW3RNTiw8QIC1gjrGWlZjslcv1ucI0=','znKxNGski8yyfGW3RNTiw8QIC1gjrGWlZjslcv1ucI0=','tVME+7mq9fmoj9f3xP0q/8QIC1gjrGWlZjslcv1ucI0=','2019-04-19 17:14:09',0),('Signal','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','ZbZ5/R4d7J4l0rxsnsnZS8QIC1gjrGWlZjslcv1ucI0=','2021-01-17 10:23:14',0),('Siilo','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','uLdEG9fHhzrsMjGbbalvj8QIC1gjrGWlZjslcv1ucI0=','2020-03-22 16:38:23',0),('Siilo','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','+BrO8wwfZd0ExayMHhOWzMQIC1gjrGWlZjslcv1ucI0=','2021-03-25 14:58:30',0),('SNGP Griep','TmKywY6y6xBfBh9DvygLOsQIC1gjrGWlZjslcv1ucI0=','fN2tOqsGFXF+3nQOhqC4t96RyVekCFwjRVUDAt+cQpc=','M0MjtEcwg0TfM/BdpGMaNsQIC1gjrGWlZjslcv1ucI0=','2019-12-16 21:29:24',0),('SNGP Griep','SKfJBIPWCGWdIE8zYbXj3sQIC1gjrGWlZjslcv1ucI0=','fN2tOqsGFXF+3nQOhqC4t96RyVekCFwjRVUDAt+cQpc=','M0MjtEcwg0TfM/BdpGMaNsQIC1gjrGWlZjslcv1ucI0=','2020-01-08 10:30:36',0),('SNGP Griep','SKfJBIPWCGWdIE8zYbXj3sQIC1gjrGWlZjslcv1ucI0=','fN2tOqsGFXF+3nQOhqC4t96RyVekCFwjRVUDAt+cQpc=','Iwequ9B9g1MyogKzEOBjLMQIC1gjrGWlZjslcv1ucI0=','2021-03-29 09:32:28',0),('SNGP Griep','zhOJM+w+4SXaB/3xt9599sQIC1gjrGWlZjslcv1ucI0=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','hZVsKj45oPR3fWk8TyP+qMQIC1gjrGWlZjslcv1ucI0=','2021-10-11 12:21:09',0),('Soap Treatments','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','wL6nEmdndzIUO9BzbY7BfcQIC1gjrGWlZjslcv1ucI0=','2018-12-17 20:52:45',0),('Soap Treatments','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','sqRYDQ+VKau1hNeeFI6Gk8QIC1gjrGWlZjslcv1ucI0=','BKgRwKEF3pIsDdSrgKOwjMQIC1gjrGWlZjslcv1ucI0=','2019-07-03 15:56:53',0),('Social deal','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','7n+LVwd9DS8eEbbBuHebaMQIC1gjrGWlZjslcv1ucI0=','2019-02-07 10:14:33',0),('Spar.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','pw1BWERlsWb46Laxl/ZHkMQIC1gjrGWlZjslcv1ucI0=','2021-10-10 17:58:07',0),('sparkmail inlog mijndomijn janine@demaat.info','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','V/6Q1YpZzYXP7WO7oTQzTsQIC1gjrGWlZjslcv1ucI0=','2021-03-24 17:41:27',0),('sparkmail inlog mijndomijn janine@demaat.info','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','1nx9fR0pXHPWYSkm+7X6T8QIC1gjrGWlZjslcv1ucI0=','2021-05-03 20:03:00',0),('Spotify','4fXqsAV5Kz+Kf/fobpD8EwqQOgPEx3RpyRp9sMH3Dg0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Q+B6h7UZrwCFzUcEJ9r+cMQIC1gjrGWlZjslcv1ucI0=','2018-11-10 21:56:05',0),('Stocard.com','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','8Aii5wflPyhYnrUOxyU/7MQIC1gjrGWlZjslcv1ucI0=','2021-09-30 11:15:26',0),('Stumpel','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','M5a9zxnLDyxXlYizHd7fjsQIC1gjrGWlZjslcv1ucI0=','2021-01-14 10:37:33',0),('sum-up app','171bvJWqcI8vciGTUNCMFsIxrLO1rQpugcvnrv7jL0Y=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+HIZO6yGDqEJishXUCgVVQMtFFQ+Y8Je/8mO93FLT/U=','2020-11-13 11:59:42',0),('Ticketveiling https://www.ticketveiling.nl','0AKSG7LZI6lpIXF5MfJT7cQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','TIE+KslqAwe0HRUhy/v8Tlq/FVPO7mdzS171/VgBjhw=','2018-12-24 10:15:21',0),('Ticketveiling https://www.ticketveiling.nl','0AKSG7LZI6lpIXF5MfJT7cQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','QTTNQTp8PoKBhtz28Od0IMQIC1gjrGWlZjslcv1ucI0=','2022-03-25 19:15:17',0),('Top Bloemen','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','fzBejZGD1/rK+TR8rspIxsQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:42:37',0),('Toplenzen','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','I+exMcqIbt5vulNQgcoLr8QIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:20:34',0),('transferpunt-go.nl','yQe0omC1mIhjNi/oNtbwB8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','xSSzNvk+D2KUgVJuVTyBzcQIC1gjrGWlZjslcv1ucI0=','2022-07-12 16:15:41',0),('Tui Mijntui www.tui.nl/mijntui','uTubSgnnM8088F4kL4/4dsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','O16hDG96d+fOKZiUywJS9sQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:06:09',0),('Tui Mijntui www.tui.nl/mijntui','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','GW6UKmdMghwKd5BDhDxCJsQIC1gjrGWlZjslcv1ucI0=','2019-10-24 18:42:48',0),('Twiiter','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','sH4C3FB50ZZanNEUP9vmGMQIC1gjrGWlZjslcv1ucI0=','2018-12-31 18:29:55',0),('Uber','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','V9UsAzoOthUIi9k48oyf9cQIC1gjrGWlZjslcv1ucI0=','2022-06-20 19:02:51',0),('UZI Uzi','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Oaj+ySraGdO+lfTNTJMtaMQIC1gjrGWlZjslcv1ucI0=','2019-09-23 05:49:59',0),('UZI Uzi','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','TOQ7KL/RanJa75NYEvswPcQIC1gjrGWlZjslcv1ucI0=','2020-01-06 13:09:38',0),('UZI Uzi','MGqlWkWv8S+J50AmonwG4fTCqByfxDWsO/zLCMmkEyyAkM4/LAJ8Lk0Ugb5yBs9yxAgLWCOsZaVmOyVy/W5wjQ==','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','Ee+FutiKRUYzHT0KcWxnGsQIC1gjrGWlZjslcv1ucI0=','2020-02-29 11:52:39',0),('UZI Uzi','hDrLJAxEHqbNJPyWaz7TdRIFYtiDspao5Ep7oLeMib+w4TpdsrgfE8WCif0BQiC5xAgLWCOsZaVmOyVy/W5wjQ==','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','Ee+FutiKRUYzHT0KcWxnGsQIC1gjrGWlZjslcv1ucI0=','2020-02-29 11:53:37',1),('Vakantie piraten','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','X5zI9AeNjTMPxS+x04k7bcQIC1gjrGWlZjslcv1ucI0=','yC5DQ7LobkJIvXJAHNEfY8QIC1gjrGWlZjslcv1ucI0=','2019-05-30 17:47:29',0),('Vakantie Veiling','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','wk9Afm4+JN0OV9CCbgzgL8QIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:14:12',0),('Van Haren','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','GkiHa5RL8I/q0RSQ6fK/D8QIC1gjrGWlZjslcv1ucI0=','2020-08-22 10:54:27',0),('Vecozo','3j+k1htW/dGhijoAvI+zQ1Ch3L5dvULzB5f+s0vxviY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','jh/wTAPKiNrvc0iL5bnZDOIRu8Nz8dMMJkjJSRiXhv4=','2019-06-04 09:54:14',0),('Vecozo','3j+k1htW/dGhijoAvI+zQ1Ch3L5dvULzB5f+s0vxviY=','3yorgVmZ48P1FwE2CTBrBMQIC1gjrGWlZjslcv1ucI0=','w+mNQ85vbIBes3+ErS6+Dhi7UWb1vbgxVCTgHD12kys=','2021-06-20 21:12:09',0),('Vecozo','3j+k1htW/dGhijoAvI+zQ1Ch3L5dvULzB5f+s0vxviY=','3yorgVmZ48P1FwE2CTBrBMQIC1gjrGWlZjslcv1ucI0=','YJttTnYH+zDAWz+g7/c7B0FtBw4nquFRjl0wRlX2aug=','2023-06-02 12:27:06',0),('Vecozo persoonlijk certificaat 30000000252756','yQe0omC1mIhjNi/oNtbwB8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','WgIoxsf3BSjCHg/nZVtTUcQIC1gjrGWlZjslcv1ucI0=','2021-05-26 09:53:23',0),('Vecozo persoonlijk certificaat 30000000252756','yQe0omC1mIhjNi/oNtbwB8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','YiRnISprEgBU88yqcbEwBsQIC1gjrGWlZjslcv1ucI0=','2023-06-21 10:26:24',0),('Videoconsult.clickdoc.nl CGM videobellen','vpyaiQpxeBeYpZoySiHlLsQIC1gjrGWlZjslcv1ucI0=','vpyaiQpxeBeYpZoySiHlLsQIC1gjrGWlZjslcv1ucI0=','8Bkq1nZQjlnjQIhTka8xHcQIC1gjrGWlZjslcv1ucI0=','2020-03-27 09:39:39',0),('VIP live','yQe0omC1mIhjNi/oNtbwB8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','WMln7itYITgZcOfdcKimV8QIC1gjrGWlZjslcv1ucI0=','2018-12-16 15:25:45',0),('VIP live','yQe0omC1mIhjNi/oNtbwB8QIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','73Tq6zU8Z/aEy8FT0aL5bmAgKGo2l/LrnakhiXrYjFg=','2021-06-11 08:33:18',0),('Volkskrant','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','9/Cv6rcR13avpsLS5AHJ9MQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:17:25',0),('Volkskrant','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','hE7xL/lPV5hiBvz3yf4iVcQIC1gjrGWlZjslcv1ucI0=','2020-02-03 05:57:48',0),('Volkskrant','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','qaZu0XinLB7FStkcvmjN28QIC1gjrGWlZjslcv1ucI0=','2020-10-05 04:57:47',0),('Volkskrant','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','y0HGQH0M/GcihHCWrG5uWMQIC1gjrGWlZjslcv1ucI0=','2020-10-05 19:33:38',0),('Volkskrant','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','0cTyCF+UDtq0h01rzwrhPMQIC1gjrGWlZjslcv1ucI0=','2020-11-05 08:52:00',0),('Volkskrant','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','BYK3ot4ryweqZ05xdImbA8QIC1gjrGWlZjslcv1ucI0=','2020-11-05 08:54:04',0),('Volkskrant','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','XOtCkD8swXKS9RSv94/8UcQIC1gjrGWlZjslcv1ucI0=','2022-11-03 13:44:56',0),('VVAA','oYNsu4riMxZycc0U+btoasQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','RJkmPCvEfWfJXQTtUO1lZMQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:49:51',0),('Waarneemapp','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','88WWRIQoUDZah7Le1QOF9cQIC1gjrGWlZjslcv1ucI0=','2019-12-28 11:29:57',0),('Wachtwoorden praktijk c schijf facilitair wat wij belangrijk vinden','UDnLoH4gpfUVwur4F704KiUb38/3ATgtHMvqunj0QFU=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','lSu4bIa66PZOuqL3wXG2C8QIC1gjrGWlZjslcv1ucI0=','2019-02-06 15:33:13',0),('WDHMN','vpyaiQpxeBeYpZoySiHlLsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','r+bAiZt+95rHj6uPX32cAsQIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:19:28',0),('We Fashion','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','ZQDcf7SyqEw3IagqU+1ggMQIC1gjrGWlZjslcv1ucI0=','2018-12-17 21:22:09',0),('Webmail.mijndomein.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','38guHIuIOgiNOIMSG/LUr8QIC1gjrGWlZjslcv1ucI0=','2020-03-25 06:05:47',0),('Webmail.mijndomein.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','lDXGfq4fdtsgj38ZF3l2+MQIC1gjrGWlZjslcv1ucI0=','2020-05-15 10:35:09',0),('Weesper nieuwa','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','EeexfqBK7Wzb0iz7mSmX8cQIC1gjrGWlZjslcv1ucI0=','2020-10-16 20:29:32',0),('Weesper nieuws','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','EeexfqBK7Wzb0iz7mSmX8cQIC1gjrGWlZjslcv1ucI0=','2020-10-16 20:29:56',0),('Werkgevers Loket','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','pm552nScM3fR8ETwJ1BYWsQIC1gjrGWlZjslcv1ucI0=','2019-01-10 13:52:10',0),('Werkgevers Loket','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','L9m3wPOFL2mXi9Li1pD+l8QIC1gjrGWlZjslcv1ucI0=','2020-03-09 13:27:53',0),('Werkgevers Loket','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','L9m3wPOFL2mXi9Li1pD+l8QIC1gjrGWlZjslcv1ucI0=','2020-03-09 13:28:12',0),('WeSeeDo','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','8qPabDt0LsLqtsJp4F8t88QIC1gjrGWlZjslcv1ucI0=','2020-03-30 10:17:36',0),('Wijgergangs Medical www.wijgergangsmedical.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','ws024LmaacfSDXzP8+2jX8QIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:12:07',0),('Wish','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','FnCqVi7DmL/0ikp/i8Mn1MQIC1gjrGWlZjslcv1ucI0=','2020-03-22 10:28:33',0),('Woonveilig app','0Lp3c+M9FxZy6ASNaMD9+cQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','gu/ETDgPO1WSp5WmTixR3OHdob+vfBvvzTjzsTTQmSA=','2019-04-16 20:19:21',0),('Woonveilig app','0Lp3c+M9FxZy6ASNaMD9+cQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','gu/ETDgPO1WSp5WmTixR3OHdob+vfBvvzTjzsTTQmSA=','2019-04-16 20:20:08',0),('Woonveilig app','7QdrwitL/IUNGVdmngR7nsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','lhXjaFAfMeh2ZL1+TX55eUfFFD0cA2zzKnll1O33Njo=','2020-12-04 12:32:41',0),('Wordfeut','mBtHy2yong8uayv95j9PicQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','E72JLMwem1PKdhQ1YFjws8QIC1gjrGWlZjslcv1ucI0=','2018-12-24 10:44:01',0),('Www.123led.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','fXLtvH3e6d7j1E/fL9rcocQIC1gjrGWlZjslcv1ucI0=','2022-11-20 16:28:41',0),('www.1reaal.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','p7dfqyUxpxok8rulwxBSC8QIC1gjrGWlZjslcv1ucI0=','2022-10-04 15:45:57',0),('www.allesvoordesauna.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','dH+aUPUyxf2OYoVZy+KGU8QIC1gjrGWlZjslcv1ucI0=','2023-01-08 22:25:54',0),('www.almeerplant.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','tutj8J+oEGiCaErh8jMHl3Hrz9jYZMZHF3brNyxxKRg=','KqGFFEfrnttC3ejmRrYg/cQIC1gjrGWlZjslcv1ucI0=','2023-04-17 20:00:44',0),('www.arcusit.itclientportal.com','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','qmpBN4zbw99tRescaKmMyMQIC1gjrGWlZjslcv1ucI0=','2022-07-08 12:27:28',0),('www.asr.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Ka+bTi//b6vXusHvSovnOcQIC1gjrGWlZjslcv1ucI0=','2022-12-20 21:26:06',0),('www.avaya.com','uq/PPvgwuqhGvh/aIrwWgMQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','8tY8A5q8awDv9pW53kr9K8QIC1gjrGWlZjslcv1ucI0=','2020-04-30 13:21:50',0),('www.avaya.com workplace','uq/PPvgwuqhGvh/aIrwWgMQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','8tY8A5q8awDv9pW53kr9K8QIC1gjrGWlZjslcv1ucI0=','2020-04-30 13:25:13',0),('www.belcentrale.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','5x8qb5ClsitoeIdaJSNf9cQIC1gjrGWlZjslcv1ucI0=','2018-11-10 21:50:37',0),('Www.Beowulf.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','ShQwlXK0gLKp9In5maRODsQIC1gjrGWlZjslcv1ucI0=','2022-05-01 18:40:38',0),('Www.bezorgdehuisartsen.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','mlhe68qnfaULm1AyYXRiesQIC1gjrGWlZjslcv1ucI0=','2022-01-31 06:06:06',0),('www.coolblue.com','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','YZ0Vdh68eikfBr8Avyh01MQIC1gjrGWlZjslcv1ucI0=','2022-10-23 13:20:42',0),('www.debevlogenhuisarts.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','RmuJrDw/Bc57jieXqR1k78QIC1gjrGWlZjslcv1ucI0=','2022-12-01 14:38:56',0),('www.denieuwebibliotheek.nl','7QdrwitL/IUNGVdmngR7nsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','TB+EU085BLZlOp+TIj741cQIC1gjrGWlZjslcv1ucI0=','2021-10-24 19:29:11',0),('Www.doecksen.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','LRDMneRSQ2YK7gSe4EfbeMQIC1gjrGWlZjslcv1ucI0=','2021-10-13 21:04:21',0),('www.doq.nl doq','D9gDXZlzu1v/CpCYCkLXNcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','91G3nCppNhi7qlDDwdOhqr/9PXOxAz3Haz6ZNhSGiuw=','2018-11-10 21:57:04',0),('www.eherkenning.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+Tv2rllKG9lUHR0Cl6ImDsQIC1gjrGWlZjslcv1ucI0=','2023-01-26 16:57:57',0),('www.eherkenning.nl Reconi','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+Tv2rllKG9lUHR0Cl6ImDsQIC1gjrGWlZjslcv1ucI0=','2023-01-26 17:23:34',0),('Www.fagron.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','W9kDgSgQHAmgTcTPr2v4KMQIC1gjrGWlZjslcv1ucI0=','2021-03-15 14:45:28',0),('www.FMS.nl','LLy/uB9hTFmICu8ZHEO1I/OE/OtR6FQxPHExI2iGhuI=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','WB9iVTikTAqk73zXtU4DcMQIC1gjrGWlZjslcv1ucI0=','2022-10-09 09:54:32',0),('www.gocards.nl','ekihCYtCNkx/Pl5LLjaD7MQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','J52KmaZryqWmm3+Sz8XMs8QIC1gjrGWlZjslcv1ucI0=','2022-02-03 08:24:40',0),('www.gowah.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','fXLtvH3e6d7j1E/fL9rcocQIC1gjrGWlZjslcv1ucI0=','2022-11-20 21:45:22',0),('www.greetz.com','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','AnD8z6Nmmg2R70X2sKEe5cQIC1gjrGWlZjslcv1ucI0=','2021-12-10 17:22:32',0),('www.henryschein.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','9JAmdoffe3SbJA19ZkBgO8QIC1gjrGWlZjslcv1ucI0=','2021-10-26 08:10:21',0),('www.hkvi.nl','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','1Lmx7yi6/JO1//7mnU9kpG2PbcGAfr+BsGFh9Dfz1uc=','2022-01-28 15:00:34',0),('Www.kaartje2go.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','S/PDt/dhnY5hXxR1uwkl4MQIC1gjrGWlZjslcv1ucI0=','2023-05-22 20:13:29',0),('www.light in the box','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','jXG0SZxI8wTcTqJtz/+tg8QIC1gjrGWlZjslcv1ucI0=','2022-02-24 16:53:54',0),('Www.mijngezondheidsmeter.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','5iw3szFtBBiCMgLweorkMMQIC1gjrGWlZjslcv1ucI0=','2023-01-03 06:20:53',0),('www.natuurhuisje.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','3KI8wfLfkMLJuCAAsmmN6cQIC1gjrGWlZjslcv1ucI0=','2021-05-11 05:03:54',0),('www.netflix.com','dM84WyM8kK6ci4JJz6rDR+uvsTmbfCp2WAOORuRVzgE=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','i07c9iMEzoW6aG2+9rMLecQIC1gjrGWlZjslcv1ucI0=','2022-06-03 18:06:00',0),('www.nvve.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','A0BvDh9aMu6hCF6+RL2OA8QIC1gjrGWlZjslcv1ucI0=','2019-12-21 15:26:45',0),('Www.paul&pitalarm.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','9oGbuztjSVdgwEnaghcKVsQIC1gjrGWlZjslcv1ucI0=','UTx8QYhdTgqLWjGIxd2qM8QIC1gjrGWlZjslcv1ucI0=','2021-07-22 07:59:35',0),('Www.picknick.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','DmzStpO75luTKu6vy7ovyuV4douOyMd/5swKbC6bB3I=','2021-08-26 14:31:01',0),('www.raamdecoratie.com','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','0Zz0q2OiR+yiPyneweiLr8QIC1gjrGWlZjslcv1ucI0=','2021-07-04 17:38:04',0),('Www.skge.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','9kujkeFYrQR+bS0Fku5SusQIC1gjrGWlZjslcv1ucI0=','2021-10-13 16:25:10',0),('www.spasereen.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','kP4uGmchLS7nqZr4E6w+xEqn6nK0DjH6BnevEbKN92c=','2023-04-08 08:38:59',0),('www.speld.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','olpxqw0LUexaZP3LiTN7tsQIC1gjrGWlZjslcv1ucI0=','2021-01-28 15:42:03',0),('www.ssfh.nl stichting sociaal fonds huisartsenzorg','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','/ssY7loUm/lugXIWJv57D8QIC1gjrGWlZjslcv1ucI0=','2021-05-18 15:20:36',0),('www.staatsloterijl.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','jtFFtFiFZvXSmDNRa0ZF2sQIC1gjrGWlZjslcv1ucI0=','2021-01-10 18:17:04',0),('www.topgear.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','2NidCGTIR8ao/1dqSsqznsQIC1gjrGWlZjslcv1ucI0=','2023-02-14 09:57:39',0),('www.tuinland.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','9vVkHEj5dyiM9wy65FecnsQIC1gjrGWlZjslcv1ucI0=','2021-04-24 12:05:21',0),('www.uziregister.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','9jogDn3KeD82WzynDGVaj9znTUGlyOI2w/Px0UfGLQ8=','fnExxf4r0WeqQbXum2j7M6N7/51AcyrMYAxRyKGbaW8=','2022-11-03 13:37:36',0),('Www.vasco.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','zKrWHwjR0xBTo6ymk2G4uIXAK/St0dqJXLugiDWUrvg=','2021-11-28 11:36:50',0),('www.voedingscentrum.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','78SXuh9/RFtQAhI84BoOfsQIC1gjrGWlZjslcv1ucI0=','2020-07-19 15:40:23',0),('www.wehkamp.nl','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','/hD0gE8Eq54AN1yJeSu1ksQIC1gjrGWlZjslcv1ucI0=','2021-10-17 07:09:50',0),('Zelfstroom zonnepanelen','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','0TROT7dCOy2N46zF5CnPXsQIC1gjrGWlZjslcv1ucI0=','2019-08-02 16:08:01',0),('Zilveren kruis app persoonlijk','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','+BrO8wwfZd0ExayMHhOWzMQIC1gjrGWlZjslcv1ucI0=','2020-06-28 11:42:37',0),('Zilveren Kruis de Maat','JJzxtnnmXqvXUJ/geXejpcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Qtg/4n+Gx8bcfVecHfKcGcQIC1gjrGWlZjslcv1ucI0=','2018-12-16 15:17:53',0),('Zilveren Kruis de Maat','JJzxtnnmXqvXUJ/geXejpcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','IgEJu7Y2yAYgKGmLaYUOrsQIC1gjrGWlZjslcv1ucI0=','2019-07-02 15:01:38',0),('Zilveren Kruis de Maat','JJzxtnnmXqvXUJ/geXejpcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','xxrEDdSSpX+gZtBdAsviz8QIC1gjrGWlZjslcv1ucI0=','2019-07-02 15:02:01',0),('Zilveren Kruis de Maat','JJzxtnnmXqvXUJ/geXejpcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','DGRZ1/lOQuqJgU9kZGEHosQIC1gjrGWlZjslcv1ucI0=','2020-11-19 20:14:03',0),('Zilveren Kruis de Maat','JJzxtnnmXqvXUJ/geXejpcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','VmCpOs3w62JAioIPt2Zib8QIC1gjrGWlZjslcv1ucI0=','2021-12-22 13:46:45',0),('Zilveren Kruis de Maat','JJzxtnnmXqvXUJ/geXejpcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','VmCpOs3w62JAioIPt2Zib7/9PXOxAz3Haz6ZNhSGiuw=','2022-12-23 10:59:17',0),('Zilveren Kruis Verstappen','/3ygYkn6raC3avUzAlrZkcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','OyXxC+vlv2bXdWlkLBk3EMQIC1gjrGWlZjslcv1ucI0=','2018-12-16 15:18:48',0),('Zilveren Kruis Verstappen','/3ygYkn6raC3avUzAlrZkcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','tOUatKbdpOZ7kKovMYioj8QIC1gjrGWlZjslcv1ucI0=','2019-10-08 10:14:57',0),('Zilveren Kruis Verstappen','/3ygYkn6raC3avUzAlrZkcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','wsBc/4UVLlUD4D0tvm3dJibdhI2nYYcLXL5wiTYw6qk=','2020-11-19 20:08:51',0),('Zilveren Kruis Verstappen','/3ygYkn6raC3avUzAlrZkcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','wsBc/4UVLlUD4D0tvm3dJg0gEEWTY3GI9LvY37edI/I=','2021-12-21 12:22:04',0),('Zoom','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','CwUNG7BiWdPuK17aHi9++sQIC1gjrGWlZjslcv1ucI0=','2020-03-25 14:30:20',0),('Zoom janine@demaat.info','LLy/uB9hTFmICu8ZHEO1IzWnSylLeQCm0973ekLJdn8=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','atS+isH/eXa+qkde5W4kKcQIC1gjrGWlZjslcv1ucI0=','2020-08-21 12:55:46',0),('Zorgdomein.nl','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','0E5pYXJTxV2H4gG9/FzulsQIC1gjrGWlZjslcv1ucI0=','2021-02-02 16:28:51',0),('Zorgdomein.nl','kyV2nr5PCbsG+4ANv9rvbKdnQAKX4hSF8uar8oIpWiY=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','yVqlHfTL8UY1ZSwGcmAHMsQIC1gjrGWlZjslcv1ucI0=','2023-06-08 19:39:55',0),('Zorgmail de Maat','EhT4Tq09Q63FFkU+4AF+dMQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','0K9dIAQaEn2Yw0j2wMqXuPqcTihAuYLi69milfaQSqc=','2020-02-27 11:50:57',0),('Zorgmail de Maat','2awsPX2zXpDBXkrg0dVpnCUX6vkS0qD+dRknU+q/q18=','EhT4Tq09Q63FFkU+4AF+dMQIC1gjrGWlZjslcv1ucI0=','FDlFaR9zIrolvLF9+AObJYUptNGAURJNgH220Q9tNJY=','2020-05-22 10:18:39',0),('Zorgmail Huisarts van Muiden','nvLrel1FClIrSOyk5zwDhcQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','P7O4td2Pz+xgzWslsA0X9ymVbrrCXdRtjl83u7++Cxo=','2020-02-27 11:52:52',0),('Zorgmail POH GGZ','MnRB2KXFdqzYzpnAfm5jBsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','sRTWt959yX2As4CtRYK3SCkIIsZpJJug8geN4/MoUhM=','2020-02-27 11:53:47',0),('Zorgmail Verstappen','2Jfmj67vBPSrvtP63bKcEsQIC1gjrGWlZjslcv1ucI0=','xAgLWCOsZaVmOyVy/W5wjcQIC1gjrGWlZjslcv1ucI0=','Cx1TidjHl2m7BlZvu79vQ05mY/GI2exmma0V05Oeu5Y=','2020-02-27 11:51:52',0); +/*!40000 ALTER TABLE `janine_` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sofie_` +-- + +DROP TABLE IF EXISTS `sofie_`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `sofie_` ( + `organization` varchar(80) NOT NULL, + `myID` varchar(129) NOT NULL, + `myName` varchar(129) NOT NULL, + `mySecret` varchar(65) NOT NULL, + `dateCreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `deleted` int(11) DEFAULT '0', + PRIMARY KEY (`organization`,`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sofie_` +-- + +LOCK TABLES `sofie_` WRITE; +/*!40000 ALTER TABLE `sofie_` DISABLE KEYS */; +INSERT INTO `sofie_` VALUES ('Demo organisation','IOArmF6698JatfiT991oLEa24i3NoWf4x7hKcoi8big=','/z0urezIhGnadD8uZAxKI0a24i3NoWf4x7hKcoi8big=','2kPGCjJkIHXK9p2uRG/GnEa24i3NoWf4x7hKcoi8big=','2023-03-20 23:12:18',0); +/*!40000 ALTER TABLE `sofie_` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2023-08-01 2:24:05 diff --git a/dumpl.py b/dumpl.py new file mode 100644 index 0000000..6368300 --- /dev/null +++ b/dumpl.py @@ -0,0 +1,54 @@ +# from flask import Flask +from Config import * +import sys +import datetime +from SecretServices import Flower,SuperFlower +from AccessControl import Access +import json +# from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash, json, make_response +# from werkzeug.exceptions import HTTPException + + +newuser = 'ignace' +newhush = 'black' + +# login db with generic user +# f = SuperFlower(newuser, newhush) +# if f.createNewTable(): + # login as new user + # u = Flower(newuser, newhush) +# add one line +#u.add('Demo organisation', 'Demo name', 'Demo login', 'Demo hush') +# read one line + +#create user +# login db with generic user +# f = SuperFlower(newuser, newhush) +# if f.createNewTable(): +# # login as new user +# u = Flower(newuser, newhush) +# # add one line +# u.add('Demo organisation', 'Demo name', 'Demo login', 'Demo hush') + + + + +# retrieve all flowers +# u = Flower(newuser, newhush) +# flowers=u.all() +# print(flowers) + + +# retrieve one flowers +# u = Flower(newuser, newhush) +# flower=u.one('ah', '2003-03-17 17:30:27') +# print(flower) + + +# dump all flowers with pwds +u = Flower(newuser, newhush) +flowers=u.all() +for f in flowers: + flower = u.one(f['organization'], f['dateCreated']) + print('"{}","{}","{}","{}","{}",'.format(flower['organization'],flower['dateCreated'],flower['myID'],flower['myName'],flower['mySecret'])) + diff --git a/flowers.py b/flowers.py new file mode 100644 index 0000000..fb286a7 --- /dev/null +++ b/flowers.py @@ -0,0 +1,200 @@ +from flask import Flask +from Config import * +import sys +import datetime +import pytz +from FlowerServices import Flower,SuperFlower +from AccessControl import Access +import json +from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash, json, make_response +from werkzeug.exceptions import HTTPException + +# configuration +DEBUG = False +SECRET_KEY = 'development key' + + +app = Flask(__name__) +app.config.from_object(__name__) + +@app.route('/') +def index(): + print(request.remote_addr) + return render_template('index.html', name_suggestion="Hello", pwd_suggestion="Want to try your luck?") + +@app.route('/browser' , methods=['POST', 'GET']) +def application(): + now = datetime.datetime.now(pytz.timezone('Europe/Amsterdam')) + + if request.method == 'GET': + return render_template('index.html', name_suggestion="Faded out", pwd_suggestion="Want to retry your luck?") + + access_ctrl = Access() + if not access_ctrl.granted(request.remote_addr): + return render_template('index.html', name_suggestion="Sorry", pwd_suggestion="Access denied") + + action=request.form['action'] + filter='' + if 'filter' in session: + filter = session['filter'] + + if action == 'logout': + session['filter'] = request.form['filter'] + session['timeout'] = now - datetime.timedelta(minutes=999) + return render_template('index.html', name_suggestion="Bye", pwd_suggestion="Come back any time") + + + if action == 'login': + user=request.form['name'] + pwd=request.form['password'] + F = Flower(user, pwd) + if F.numberOfEntries()>=0: + session['dbuser'] = user + session['dbpwd'] = pwd + session['timeout'] = now + session['filter'] = filter + return render_template('list.html', flowers=F.all(), filter=filter) + #login failure + access_ctrl.deny(request.remote_addr) + print("Flowers - authorization failed for {}".format(user)) + return render_template('index.html', name_suggestion="Sorry", pwd_suggestion="Better next time") + + if 'timeout' in session and session['timeout']+datetime.timedelta(minutes=10)>now: + session['timeout'] = now + + if 'filter' in request.form.keys() and len(request.form['filter'])>1 and request.form['filter'] != DONOTSETFILTER: + session['filter']=request.form['filter'] + filter = request.form['filter'] + + F = Flower(session['dbuser'], session['dbpwd']) + if F.numberOfEntries()>=0: + + if action == 'list': + return render_template('list.html', flowers=F.all(), filter=filter) + + if action == 'show': + return render_template('show.html', flower=F.one(request.form['organization'], request.form['datetime'])) + + if action == 'edit': + return render_template('edit.html', flower=F.one(request.form['organization'], request.form['datetime'])) + + if action == 'new': + return render_template('edit.html', flower=F.empty()) + + if action == 'save': + flower = F.add(request.form['organization'],request.form['myname'],request.form['myid'],request.form['secret']) + session['filter']=request.form['organization'] + return render_template('show.html', flower=flower) + + if action == 'deactivate': + flower = F.deactivate(request.form['organization'],request.form['datetime']) + session['filter']='' + return render_template('show.html', flower=flower) + + if action == 'rehush': + return render_template('rehush.html', flower=F.empty()) + + + else: + return render_template('new.html', flower=F.empty()) + + + return render_template('index.html', name_suggestion="Sorry", pwd_suggestion="Better next time") + +@app.route('/create' , methods=['POST','GET']) +def create(): + access_ctrl = Access() + if not access_ctrl.granted(request.remote_addr): + return render_template('index.html', name_suggestion="Sorry", pwd_suggestion="Access denied") + + if 'name' not in request.form: + return render_template('create.html') + newuser = request.form['name'] + newhush = request.form['password'] + + # login db with generic user + f = SuperFlower(newuser, newhush) + if f.createNewTable(): + # login as new user + u = Flower(newuser, newhush) + # add one line + u.add('Demo organisation', 'Demo name', 'Demo login', 'Demo hush') + + # return to the login page + return render_template('index.html', name_suggestion="Now login", pwd_suggestion="for your very first time") + + return render_template('create.html', message="Sorry - System error - check log files") + + +@app.route('/update_pwd', methods=['POST','GET']) +def update_pwd(): + if 'name' not in request.form: + return render_template('rehush.html') + user = request.form['name'] + oldhush = request.form['old_password'] + newhush = request.form['new_password'] + + # login db with generic user + f = Flower(user, oldhush) + message = f.update_pwd(newhush) + + f = SuperFlower(user, oldhush) + f.flush_privs() + + return render_template('index.html', name_suggestion=message, pwd_suggestion="...") + + +# @app.route('/migrate', methods=['POST','GET']) +# def migrate(): +# user = 'ignace' +# hush = 'black' +# +# f = SuperFlower(user, hush) +# f.migrate(user) +# +# return render_template('index.html', name_suggestion='login again', pwd_suggestion="...") + +@app.route('/app' , methods=['POST']) +def web_service(): + # same thing as 'aplication, but returns go in json + result = json.dumps({'result': -1, 'message': 'Invalid entry'}) + + try: + access_ctrl = Access() + if not access_ctrl.granted(request.remote_addr): + result = json.dumps({'result': -1, 'message': 'Access denied'}) + + else: + #no session variables here - the client will take care of fileter and timeout + action = request.form['action'] + user = request.form['name'] + pwd = request.form['password'] + F = Flower(user, pwd) + if F.numberOfEntries() == -1: + #login failure + access_ctrl.deny(request.remote_addr) + result = json.dumps({'result': 0, 'message': 'Invalid username or password'}) + + elif action == 'login': + result = json.dumps({'result': 1, 'message': 'Access granted'}) + + elif action == 'list': + result = json.dumps({'result': 1, 'message': 'Ok', 'list': json.dumps(F.all())}) + + elif action == 'one': + result = json.dumps({'result': 1, 'message': 'Ok', 'flower': json.dumps( F.one(request.form['organization'], request.form['dateCreated']) )}) + + elif action == 'save': + result = json.dumps({'result': 1, 'message': 'Ok', 'flower': json.dumps(F.add(request.form['organization'],request.form['myname'],request.form['myid'],request.form['secret']) )}) + + elif action == 'deactivate': + result = json.dumps({'result': 1, 'message': 'Ok', 'flower': json.dumps(F.deactivate(request.form['organization'], request.form['dateCreated']))}) + + except: + pass + return result + + +if __name__ == '__main__': + app.secret_key = 'adhf adsh 8347y92347rupqo;wjf cowuyergc9b24387ryx1 -923pqr pqwejf qy7i34' + app.run(host='0.0.0.0', port=8080) diff --git a/flowers.wsgi b/flowers.wsgi new file mode 100644 index 0000000..cdf6eb2 --- /dev/null +++ b/flowers.wsgi @@ -0,0 +1,7 @@ +#!/usr/bin/python + +import sys +sys.path.insert(0, '/usr/share/projects/wsgi_apps/flowers') + +from flowers import app as application + diff --git a/import.py b/import.py new file mode 100644 index 0000000..b1f1921 --- /dev/null +++ b/import.py @@ -0,0 +1,28 @@ +from Config import * +import sys +import datetime +from FlowerServices import Flower,SuperFlower +from AccessControl import Access + +file1 = open('pins.csv', 'r') +Lines = file1.readlines() + +newuser = 'janine' +newhush = 'demaat196' + +# create user in the db. +f = SuperFlower(newuser, newhush) +if f.createNewTable(): + # login as new user + u = Flower(newuser, newhush) + + count = 0 + # Strips the newline character + for line in Lines: + count += 1 + line=line.strip() + print(line) + (org, date, id, name, pwd) = line.split('","',5) + org = org[1:] + pwd = pwd[:-2] + u.add(org, name, id, pwd, 0, date) diff --git a/pins.csv b/pins.csv new file mode 100644 index 0000000..ef64638 --- /dev/null +++ b/pins.csv @@ -0,0 +1,317 @@ +"https://en.lespassionnesduvin.com/","2023-07-23 15:05:32","janine@demaat.info","","HELLO2023&$", +"Www.kaartje2go.nl","2023-05-22 20:13:29","janine@demaat.info","","Kkart2211zs#", +"Ignace tel ontgrendelen","2023-04-30 19:17:14","janine@demaat.info","","007662", +"www.almeerplant.nl","2023-04-17 20:00:44","janine@demaat.info","kaart nummer 00089277","TISmeWHAT!@", +"www.spasereen.nl","2023-04-08 08:38:59","janine@demaat.info",""," Massage Sport 25 min. Start", +"https://www.america-today.com","2023-03-28 15:38:35","janine@demaat.info","","9yrtaqSXRUhx5Wm", +"komoot.nl","2023-03-08 07:55:02","janine@demaat.info","","K20k23@#&", +"Promedico.topdesk.net zelfservice portaal selfservice ","2023-03-01 13:11:37","jdmaat","","Pro2020!", +"www.topgear.nl","2023-02-14 09:57:39","janine@demaat.info","","tttopGEAR#@", +"https://loket.loket.nl werkgevers loket","2023-02-02 14:52:33","janine@demaat.info","","Welkom01", +"https://gegevensportaal.belastingdienst.nl","2023-02-02 09:25:35","UBD002281","","Muiden2023!!", +"www.eherkenning.nl Reconi","2023-01-26 17:23:34","janine@demaat.info","","Muiden2023#@!", +"www.eherkenning.nl","2023-01-26 16:57:57","janine@demaat.info","","Muiden2023#@!", +"https://waarneemapp.nl/companies/4708/schedules/openshifts","2023-01-26 15:46:15","janine@demaat.info","","HASamen2019", +"Loonheffing praktijk Belastingdienst Postbus 8738 4820 BA BREDA","2023-01-18 17:02:51","janine@demaat.info","","857592683L02", +"Bureaublad waarnemer","2023-01-11 07:35:31","waarnemer ","","Welkom2023", +"nationale nederlanden nn.nl --&amp;gt; ZAKELIJK!","2023-01-09 16:27:05","ci4000025776","ci4000025776","NAT2023Burg15A", +"www.allesvoordesauna.nl","2023-01-08 22:25:54","janine@demaat.info","","SELdeVie202367", +"Www.mijngezondheidsmeter.nl","2023-01-03 06:20:53","janine@demaat.info","","PgOin2023@#!", +"https://www.milieubarometer.nl/csr/o/zhjws/i/88566/y1/n/0/","2022-12-29 18:37:12","v_verstappen@hotmail.com","","Burgemeester15A", +"www.asr.nl","2022-12-20 21:26:06","janine@demaat.info","","6497", +"www.debevlogenhuisarts.nl","2022-12-01 14:38:56","janine@demaat.info","","FlyFree2023#!", +"Https:/portaal.zorgvandezaak.nl/login","2022-11-25 11:13:42","Huisartsdemaat@ezorg.nl","","ZZZorg2023%!", +"www.gowah.nl","2022-11-20 21:45:22","janine@demaat.info","","LeD$&2022!", +"Www.123led.nl","2022-11-20 16:28:41","janine@demaat.info","","LeD$&2022!", +"www.uziregister.nl","2022-11-03 13:37:36","janine@demaat.info","Intrek VwuS5neALLc8","Pin 283357 puk 231958 ", +"www.coolblue.com","2022-10-23 13:20:42","janine@demaat.info","","B2v-EPG-Cri-uu", +"www.FMS.nl","2022-10-09 09:54:32","janine@demaat.info ","","FMSricht202144", +"Digitalis NHG rx","2022-10-04 21:35:30","v_verstappen@hotmail.com","","Burgemeester15a", +"www.1reaal.nl","2022-10-04 15:45:57","janine@demaat.info","","REa!@33X", +"MedGemak+","2022-10-04 08:45:12","Janine","","64971", +"ignaceontgrendelingtelefoon","2022-09-11 09:11:13","janine@demaat.info","","070662", +"Inlog praktijk start scherm bureaublad desktop","2023-07-25 10:35:26","janine@demaat.info","","HUISarts67!@#$%!!!!", +"Dpg.nl","2022-07-12 16:52:54","janine@demaat.info","","DpppG2021#!", +"transferpunt-go.nl","2022-07-12 16:15:41","JdeMaat","","Muiden2022oke", +"www.arcusit.itclientportal.com","2022-07-08 12:27:28","Huisartsdemaat@ezorg.nl","","MuidenGez!!", +"Uber","2022-06-20 19:02:51","janine@demaat.info","","ZzGg56&#", +"https://mijnoproep.sanquin.nl/","2022-06-15 16:07:04","janine@demaat.info","","SanQUIN2022&##", +"www.netflix.com","2022-06-03 18:06:00","ignace.suy@gmail.com","","querijnnf", +"GAIA https://www.pe-online.org/SPE001_PR_Inloggen.aspx?taalID=&Calenda","2022-05-26 13:07:07","BIG-19042868401","","GaIA2022$#", +"Moby parkeren","2022-05-08 08:48:19","janine@demaat.info","","MoBy2022$$", +"Www.Beowulf.nl","2022-05-01 18:40:38","janine@demaat.info","","BEoAlm2022!", +"Discord","2022-04-27 09:53:37","janinedemaat","janine@demaat.info","Pompen2022#", +"Inlog praktijk startscherm bureaublad","2022-11-25 07:01:05","janine@demaat.info","","HUISarts67!@#$%!!", +"ABN Amro Gold Creditcard 64971","2022-03-02 21:38:21","JDEMAAT1967","1381","creditin2015isnotBAD@", +"www.light in the box","2022-02-24 16:53:54","janine@demaat.info","","R9TC8cS", +"https://www.gowah.nl/default.htm","2022-02-22 15:13:00","janine@demaat.info","","GGowah3342&#", +"Medfeed","2022-02-20 15:50:29","janine@demaat.info","","ME21&&#@", +"https://www.neleman.org","2022-02-17 12:06:37","janine@demaat.info","","87NEel&&&", +"www.gocards.nl","2022-02-03 08:24:40","Janinedm","","44554xq!", +"Www.bezorgdehuisartsen.nl","2022-01-31 06:06:06","janine@demaat.info","","Bezorgdin2022!?&", +"Cees.bezorgdehuisartsen.nl","2022-01-31 06:05:40","janine@demaat.info","","Bezorgdin2022!?&", +"www.hkvi.nl","2022-01-28 15:00:34","Huisartsdemaat@ezorg.nl","","HuisartsvanMuiden2021!", +"IMDB","2022-01-01 20:05:41","janine@demaat.info","","IiMmDdBB2021!?", +"www.greetz.com","2021-12-10 17:22:32","janine@demaat.info","","GRRR2019&@ha", +"Administratiehuisartsvanmuiden@ezorg.nl","2021-12-02 14:53:33","janine@demaat.info","","LiesKa80", +"Www.vasco.nl","2021-11-28 11:36:50","janine@demaat.info","","RivmVasco2921## 64971", +"Inlog praktijk start scherm bureaublad","2022-07-26 12:58:56","janine@demaat.info","","HUISarts67!@#$%!", +"www.henryschein.nl","2021-10-26 08:10:21","janine@demaat.info","","HENry2021@@", +"www.denieuwebibliotheek.nl","2021-10-24 19:29:11","janinedemaat","","BiBlio2121!", +"www.wehkamp.nl","2021-10-17 07:09:50","janine@demaat.info","","WEH2021k!!", +"Www.doecksen.nl","2021-10-13 21:04:21","janine@demaat.info","","2021Doecksen&&", +"Www.skge.nl","2021-10-13 16:25:10","janine@demaat.info","","VanKlacht2021$#", +"Spar.nl","2021-10-10 17:58:07","janine@demaat.info","","SpAr67$#!", +"Hopin.com","2021-10-05 16:44:07","janine@demaat.info","","HOPhop2021%$", +"Microsoft Teams.nl","2021-10-03 11:34:47","janine@demaat.info","","Xander@2", +"Kinepolis.nl bioscoop","2021-10-03 07:36:50","janine@demaat.info","","AlmKin67$$", +"Stocard.com","2021-09-30 11:15:26","janine@demaat.info","","1112", +"DHL.nl app","2021-09-26 21:19:04","janine@demaat.info","","@3daH-55", +"Pharmeon beheer pagina","2022-07-12 13:26:55","assistenteverstappen@ezorg.nl","","Muiden2022!", +"persgroep.beleefklassiek.nl","2021-09-18 08:24:54","Janine.Maat.978","","7fb5a18ca6", +"https://www.familienet.nl/client/katja-suy-linders/","2021-09-12 10:54:13","janine@demaat.info","","KatjaMOERG2020!", +"Bureaublad praktijk waarnemer en assistentes","2021-09-10 13:59:14","Waarnemer","","Muiden2021!", +"Www.picknick.nl","2021-08-26 14:31:01","janine@demaat.info","","vooruitmetdegeit2021!", +"Promedico dongel wrnarts","2021-07-30 06:17:52","wrnarts","","4444", +"Www.paul&pitalarm.nl","2021-07-22 07:59:35","janine@demaat.info","Janine","102127", +"www.raamdecoratie.com","2021-07-04 17:38:04","janine@demaat.info","","r2021aam@&", +"https://www.supersaas.nl/schedule/login/hartforherAlmere/hart_for_her_","2021-06-21 18:44:57","janine@demaat.info","","sport2021!!", +"Vecozo persoonlijk certificaat 30000000252756","2023-06-21 10:26:24","JdeMaat","","2023Muiden!", +"www.ssfh.nl stichting sociaal fonds huisartsenzorg","2021-05-18 15:20:36","janine@demaat.info","","SSfh2020!9", +"https://open.viadesk.com/do/portal","2021-05-11 17:26:35","janine@demaat.info","","OPEN2020Janine$#", +"www.natuurhuisje.nl","2021-05-11 05:03:54","janine@demaat.info","","NAtuurr2021!", +"Promedico.topdesk.net zelfservice portaal","2021-05-02 18:03:37","jdmaat","","Pro2020!", +"www.tuinland.nl","2021-04-24 12:05:21","janine@demaat.info","","T@uinland!2", +"https://www.teunstuinposters.nl/","2021-03-28 10:10:53","janine@demaat.info","","857058d8", +"Owncloud https://www.suy.nu/cloud","2021-03-26 20:27:19","janine","","6767 pincode, xanderj2", +"sparkmail inlog mijndomijn janine@demaat.info","2021-05-03 20:03:00","janine@demaat.info","","Xander^66Suy", +"mail inlog mijndomijn janine@demaat.info","2021-05-03 20:03:38","janine@demaat.info","","Xander^66Suy", +"Www.fagron.nl","2021-03-15 14:45:28","janine@demaat.info","","FGRN2021#@", +"financieelhuisartsvanmuiden@ezorg.nl webmail","2021-03-14 16:09:59","financieelhuisartsvanmuiden@ezorg.nl","","kr39S5q0lonc", +"huisartsvanmuiden@ezorg.nl webmail ","2021-03-14 16:08:45","huisartsvanmuiden@ezorg.nl","","Ywlz9SWyuOLF", +"https://online.loket.nl/vso.prd.loket werkgevers loket","2021-03-11 15:21:10","janine@demaat.info","","Welkom01", +"Medi-access","2021-02-28 17:08:18","janine@demaat.info","","MeDI2021!Acc!$", +"intershift","2023-02-12 11:22:35","janine@demaat.info","","XanderJ2!", +"ABN Amro Gold Creditcard","2021-02-18 10:12:13","JDEMAAT1967","1381","creditin2015isnotBAD@", +"ABN NL65ABNA0247117560 pas 221 ","2021-02-14 21:26:34","janine@demaat.info","","pin 6783", +"ABN NL53ABNA0247355232 pas 441","2021-02-14 21:18:26","janine@demaat.info","","2921", +"Geneeskunde boek.nl","2021-02-07 13:30:10","janine@demaat.info","","BSl2021xj!", +"Zorgdomein.nl","2023-06-08 19:39:55","Huisartsdemaat@ezorg.nl",""," ZOrg2021!!!", +"Gast guest login","2021-02-01 21:49:20","Legio scipio","","althome_2019*FF", +"Login.WeSeeDo.nl","2021-02-01 08:20:15","Huisartsdemaat@ezorg.nl","","We2020SEE!", +"www.speld.nl","2021-01-28 15:42:03","janine@demaat.info","","Sspeld2021!!", +"Gold card","2021-01-25 18:42:58","janine@demaat.info","5341260091362308 425","2021secabn (3d security code)", +"Signal","2021-01-17 10:23:14","janine@demaat.info","","6767", +"Amazon","2021-01-14 23:06:47","janine@demaat.info","","AMAzing2121&!", +"Amazon prime","2021-01-14 22:12:51","Ignace.suy@gmail.com","","querijnAP", +"https://landelijkeleeromgeving.nspoh.nl/local/nspoh_register/signup.ph","2021-01-14 15:52:22","janine@demaat.info","","CoViD2019@#", +"Stumpel","2021-01-14 10:37:33","janine@demaat.info","","ST2021u$$", +"beheer.pharmeon.nl/Inloggen/app/","2021-01-14 09:00:05","v_verstappen@hotmail.com","","Burgemeester15a!", +"www.staatsloterijl.nl","2021-01-10 18:17:04","janine@demaat.info","","ST@aat!@2!35", +"Leeg worddocument","2021-01-07 10:15:58","janine@demaat.info","Op de Fschijf","Hierinstaanallewachtwoorden", +"Huisarts.mediq.nl/inloggen Mediq voorschrijfportaal hulpmiddelen","2020-12-21 07:39:17","MEDIQpatientdeMaat","","Mediq20211398", +"Mediq voorschrijfportaal hulpmiddelen","2020-12-18 10:10:24","Huisartsdemaat@ezorg.nl","","MEDIQpatientdeMaat", +"sum-up app","2020-11-13 11:59:42","v_verstappen@hotmail.com","","Burgemeester1398BE!", +"https://www.dokterandrebeautyworld.nl/","2020-11-09 22:14:11","janine@demaat.info","","##!2020jm!", +"Lanteltelefooninlogstoring","2020-11-02 11:36:49","janine@demaat.info toestel 16","16","3316572479", +"LHV panel","2020-10-30 19:05:34","janine@demaat.info","","LHv2222#@", +"Mcc gooi en Vechtstreek","2020-10-29 15:36:30","janine@demaat.info","","McC2019xj", +"Flitsmeister","2020-10-17 10:53:17","janine@demaat.info","","Flitzz!", +"Weesper nieuws","2020-10-16 20:29:56","janine@demaat.info","","WEEsper2020&#", +"Weesper nieuwa","2020-10-16 20:29:32","janine@demaat.info","","WEEsper2020&#", +"Natuurmonumenten","2020-10-15 13:37:03","janine@demaat.info","","3996486 lidnummer", +"https://www.bambooimport.com","2020-10-01 20:22:00","janine@demaat.info","","Bbambooo2020!", +"onlinebibliotheek.nl","2020-09-03 13:54:23","20060004773818","","BIEB2020@!67e", +"Mijn.euronature.nl","2020-09-03 08:34:35","janine@demaat.info","","rGPqNciD", +"DASHBOARD open","2020-08-22 11:54:04","janine@demaat.info","","DASH2020@#", +"Van Haren","2020-08-22 10:54:27","janine@demaat.info","","V5e11wONm", +"Zoom janine@demaat.info","2020-08-21 12:55:46","janine@demaat.info","","ZooM@#2020!", +"decathlon","2020-08-09 09:19:57","janine@demaat.info","","DE2020LL!", +"Faxhuisartsvanmuiden@ezorg.nl","2020-08-05 10:38:10","Faxhuisartsvanmuiden@ezorg.nl","","Welkom2020!", +"Promedico.topdesk.net","2020-07-28 11:32:25","jdmaat","","Pro2020!", +"www.voedingscentrum.nl","2020-07-19 15:40:23","janine@demaat.info","","Voe2020DD@", +"EZORG webmail inloggen assistenteverstappen@ezorg.nl","2020-07-14 06:17:29","assistenteverstappen@ezorg.nl","","Muiden2020", +"Bergman clinics app","2020-07-13 14:00:55","janine@demaat.info","","676764", +"https://mijnhypotheek.lloydsbank.nl/hypotheek","2020-07-09 12:33:55","janine@demaat.info","","LLOY2019%#!", +"Flevo-landschap.nl","2020-06-30 21:00:59","janine@demaat.info","","Flevo2020!@", +"Rhogo.qarebase.nl/account/login","2020-06-30 17:50:46","janine@demaat.info","","Mcix+Q69", +"Zilveren kruis app persoonlijk","2020-06-28 11:42:37","janine@demaat.info","","64971", +"Https://Promedico.topdesk.net","2020-06-19 14:58:02","jdmaat","","Muiden2020", +"Richtlijnendatabase.nl","2020-06-19 13:34:12","Huisartsdemaat@ezorg.nl","","MedSpeFed2020", +"EZORG webmail inloggen","2020-05-13 10:21:33","assistentedemaat@ezorg.nl","","Muiden2020", +"Mediq.nl","2020-05-04 05:47:30","Huisartsdemaat@ezorg.nl","","MedBis2020!", +"NPA Vincent","2021-08-03 08:33:23","v_verstappen@hotmail.com","","npaweb1398BE", +"www.avaya.com workplace","2020-04-30 13:25:13","Toestel 16","","Muiden1398", +"www.avaya.com","2020-04-30 13:21:50","Toestel 16","","Muiden1398", +"NPAweb.nl","2022-06-13 13:33:10","janine@demaat.info","","NPA2020Muiden1!!!", +"Groene Amsterdammer","2020-04-24 14:55:39","janine@demaat.info","","Groen22!", +"Open","2020-04-23 16:36:21","janine@demaat.info","","OPEN2020Janine$#", +"ISSUU","2020-04-13 17:02:19","janine@demaat.info","","ISSUU2020#@1", +"nationale nederlanden nn.nl --&gt; ZAKELIJK!","2020-04-12 11:17:15","ci4000025776","v_verstappen@gmail.com","Burgemeester1398B&", +"Https://covid19.u-diagnostics.com","2020-04-07 14:45:35","Huisartsdemaat@ezorg.nl","","GoFit2020#$2", +"WeSeeDo","2020-03-30 10:17:36","Huisartsdemaat@ezorg.nl","","We2020SEE!", +"Videoconsult.clickdoc.nl CGM videobellen","2020-03-27 09:39:39","jdemaat","jdemaat","CGMvideo2020$$", +"Zoom","2020-03-25 14:30:20","Huisartsdemaat@ezorg.nl","","ZZZoom2020!", +"Webmail.mijndomein.nl","2020-05-15 10:35:09","janine@demaat.info","","xanderJ2", +"CGM videobellen","2020-03-23 14:50:03","jdemaat","","CGMvideo2020$$", +"Siilo","2021-03-25 14:58:30","janine@demaat.info","janine@demaat.info","64971", +"Wish","2020-03-22 10:28:33","janine@demaat.info","janine@demaat.info","WiSH2121#@", +"Medischescholing.nl","2020-05-12 18:19:45","janine@demaat.info","janine@demaat.info"," MediCovid2020!", +"MedGemak","2020-03-03 09:12:38","Janine","","64971", +"Zorgmail POH GGZ","2020-02-27 11:53:47","500110871","","pjj4s-zb3s9-yzntx-62kvu-f2x7d", +"Zorgmail Huisarts van Muiden","2020-02-27 11:52:52","500107607","","5wgza-ajpxv-h5j7j-2wpjm-28wny", +"Zorgmail Verstappen","2020-02-27 11:51:52","500107252","","yup5s-sn62n-vmsvr-7wp68-j4ru7", +"Zorgmail de Maat","2020-05-22 10:18:39","xa3bm-x6uak-zsmw4-6fsra-jbdh8","500013469","ZorgMaildemaat2020!", +"De nieuwe bibliotheek","2020-02-20 19:42:42","JdeMaat","","BiebAlmere2020!", +"Bureaublad praktijk waarnemer","2021-01-27 06:54:56","Waarnemer","","Welkom2021", +"Waarneemapp","2019-12-28 11:29:57","janine@demaat.info","janine@demaat.info","HASamen2019", +"www.nvve.nl","2019-12-21 15:26:45","janine@demaat.info","janine@demaat.info","MaatNVVE2019", +"SNGP Griep","2021-10-11 12:21:09","0108030-01","janine@demaat.info","MUIDEN1398BE!!", +"Computer praktijk Vincent","2020-02-26 13:45:33","Vincent","Vincent","Muiden2017!", +"GhoGo.nl","2019-11-13 22:37:35","janine@demaat.info","janine@demaat.info","GhoGo2019#$2", +"PIM inloggen telefonie huisartsenpost","2019-11-10 09:05:22","janine@demaat.info","primair-bla-spreekkamer5 ( of een ander nummer)","Pr1m@1r!", +"MX-5 Owners","2019-11-03 10:16:44","janine@demaat.info","janine@demaat.info","Owners445", +"MX-5 Iwners","2019-11-03 10:15:53","janine@demaat.info","janine@demaat.info","Owners445", +"Omzetbelasting nummer (ob-nummer)","2019-10-31 15:41:01","janine@demaat.info","janine@demaat.info","101394585B01", +"BTW identificatienummer","2019-10-31 15:39:55","janine@demaat.info","janine@demaat.info","NL001387127B24", +"paspoort Janine de Maat 17 05 1967","2019-10-24 19:03:50","Janine paspoort tot 16 11 2027","janine@demaat.info","NM87JHH81", +"paspoort Ignace Marie Lucien Suy 12 11 1964","2019-10-24 19:02:34","janine@demaat.info","Ignace paspoort tot 17 10 2026","NT9DKR0C1", +"Eetmeter","2019-10-17 15:41:41","janine@demaat.info","janine@demaat.info","Eet!Eet", +"Body FX figure8","2019-09-26 16:40:09","janine@demaat.info","","2019janinenew", +"Inlog praktijk start scherm","2021-07-14 05:54:56","janine@demaat.info","","HUISarts67!@#", +"Lantel cloud","2020-11-10 06:53:35","Huisartsdemaat@ezorg.nl","Huisartsdemaat@ezorg.nl","LanTel2019@@##", +"Lantel cliud","2019-08-14 15:26:51","Huisartsdemaat@ezorg.nl","Huisartsdemaat@ezorg.nl","LanTel2019@#3EZORG", +"Zelfstroom zonnepanelen","2019-08-02 16:08:01","janine@demaat.info","","Zelf2019&&", +"nationale nederlanden nn.nl --> ZAKELIJK!","2019-11-28 12:07:53","ci4000025776","huisartsverstappen@ezorg.nl","NAT2019Burg15A", +"Bayer medischwijzer.nl","2019-07-08 08:08:48","janine@demaat.info","","BaYer2019$$", +"Google","2020-03-22 13:46:51","janine.de.maat@gmail.com","","Xanderj2!", +"Vecozo","2023-06-02 12:27:06","Systeemcertificaat","MUIDEN2021!@","40000000127056pin MUIDEN2023!!", +"IC Taurus zelfservice portaal","2019-06-03 07:24:52","Huisartsverstappen@ezorg.nl","","W3Lkom@19!!", +"Vakantie piraten","2019-05-30 17:47:29","janine@demaat.info","janinepir","Vak2019Piraten#", +"Pharmeon","2021-09-07 06:40:54","assistenteverstappen@ezorg.nl","","2DEjTsFsDtw1", +"Makro","2019-05-28 15:04:16","janine@demaat.info","","Makro&&2019", +"de la mar","2019-05-25 11:54:42","janine@demaat.info","","altijdLEUK2019!", +"CBOARDS caresharing","2019-05-27 10:48:47","Huisartsdemaat@ezorg.nl","Huisartsdemaat@ezorg.nl","CBOARDS janine 2019 pin 64971", +"Instituut verantwoord medicijn gebruik IVM","2019-05-16 14:54:02","janine@demaat.info","","IvM2019IvM!", +"Digitalis","2019-05-08 14:05:42","v_verstappen@hotmail.com","","Burgemeester15a", +"Parool","2020-10-29 20:58:54","janine@demaat.info","","Parool1112@@", +"Mijn lcr inloggen","2019-04-29 21:54:01","VERSTAPPENV01","","Burgemeester15a", +"Marktplaats.nl","2019-04-28 14:04:39","janine@demaat.info","","MaRkTplaats2019$$#", +"Hopir","2019-04-25 08:25:58","janine@demaat.info","","Noorder2019", +"Secundum WIFI guests","2019-04-19 17:14:09","Secundum","Secundum","HH*20190405gg", +"Woonveilig app","2020-12-04 12:32:41","janinedemaat","","G7^Fddsr43#3 of pincode 6497", +"EHerkenning Cream Reconi de Maat","2019-04-05 14:35:36","janine@demaat.info","","64971", +"https://login.ns.nl/login NS","2021-05-24 13:21:27","janine@demaat.info","","NS2019ns@#!", +"Hudson Bay","2019-04-04 17:49:20","janine@demaat.info","","Hud2020Son@#$!", +"primus internet","2019-04-04 09:19:52","althome_2019*FF","","althome_2019*FF", +"Notaris unie 2","2019-03-25 19:28:01","janine@demaat.info","","XanderV20", +"Notaris unie","2019-03-25 19:19:31","Ignace.suy@gmail.com","","querijnv20", +"ParkMobile","2019-03-10 13:29:11","janine@demaat.info","","piaivtd", +"ASN bank","2020-12-02 19:22:25","janineasnbank","64971","asn!janine67DEMAAT", +"Overheid berichtenbox app","2019-02-14 18:48:23","Janine","Janine","64972", +"Dongel janine werk","2019-02-14 16:16:25","jdmaat","","1112", +"Dongel Janine thuus","2019-02-14 16:15:36","JdeMaat2","","2228", +"Dongel van co","2019-02-14 16:14:58","comuiden","","3333", +"Post.nl","2019-02-07 17:48:39","janine@demaat.info","","PosT2019@#6", +"Social deal","2019-02-07 10:14:33","janine@demaat.info","","SoCial2020$#$", +"FTO Online","2019-02-06 21:19:26","janine@demaat.info","","FtO2019#$6", +"Wachtwoorden praktijk c schijf facilitair wat wij belangrijk vinden","2019-02-06 15:33:13","Praktijk login c schijf","","Is er niet", +"Plex","2019-02-03 21:44:47","janine.de.maat@gmail.com","","Querijnp7", +"cloud https://www.suy.nu/cloud","2020-04-28 21:21:10","janine@demaat.info","","6767 pincode xanderj2", +"Werkgevers Loket","2020-03-09 13:28:12","janine@demaat.info","","Welkom01", +"DIGID","2020-05-01 14:10:28","JanineDigid","","Eninaj!2 67941", +"EZORG inloggen webmail: webmail.ezorg.nl ","2019-01-03 12:58:56","huisartsdemaat@ezorg.nl","","EZORG2017$%", +"nationale nederlanden nn.nl --> ZAKELIJK!","2019-01-03 12:48:28","CI4000025776","","NN2017HuisartsvanMuiden", +"Twiiter","2018-12-31 18:29:55","janine@demaat.info","","twetenisfun2018&", +"DIGIPAS Promedico 1112","2018-12-24 11:05:31","jdmaat","","1112", +"DIGIPAS Dongel Promedico 2228","2018-12-24 11:05:02","JdeMaat2","","2228", +"Primair Huisartsenpost","2020-08-23 10:38:30","janine@demaat.info","jdemaat","xanderjprimair", +"HAWEB","2022-12-14 06:05:30","janine@demaat.info","","HaWeb#2023&!", +"123INKT","2018-12-24 10:59:39","janine@demaat.info","","janine2012#123inkt", +"Nespresso","2018-12-24 10:52:06","janine@demaat.info","","nespresso12#", +"Herensokken.nl","2018-12-24 10:50:22","janine@demaat.info","","herensokken2013HAHA", +"GAIA https://www.pe-online.org/SPE001_PR_Inloggen.aspx?taalID=&Calenda","2018-12-24 10:47:57","BIG-19042868401","","weet ik niet", +"Wordfeut","2018-12-24 10:44:01","janinewordfeud67","","hallo67", +"Dropbox","2018-12-24 10:42:51","janine@demaat.info","","janinedropbox2014#$", +"NTVG inloggen","2018-12-24 10:34:45","jdemaat","","Ntvg2013demaat", +"FACEBOOK Facebook","2018-12-24 10:31:28","janine@demaat.info","","faceb2015@!@", +"ABN Amro Creditcard","2021-02-18 10:11:48","JDEMAAT1967","1381","creditin2015isnotBAD@", +"Linda TV","2018-12-24 10:21:06","janine@demaat.info","","HalloLindaTV2015", +"Toplenzen","2018-12-24 10:20:34","janine@demaat.info","","TopLenzen2015@#", +"Museumkaart","2018-12-24 10:19:57","janine@demaat.info",""," Museum2016$%", +"WDHMN","2018-12-24 10:19:28","jdemaat","","WDHMN2016$%", +"Nextdoor","2019-11-14 17:22:23","janine@demaat.info","","NextDoor201954@", +"Muidernieuws online lezen","2022-07-06 21:27:18","janine@demaat.info","","WEEsper2020&#", +"Managemenstboek","2018-12-24 10:17:54","janine@demaat.info","","manage2016@#", +"Volkskrant","2022-11-03 13:44:56","janine@demaat.info","","Nrcleuk!!!@", +"Airmiles","2020-03-12 13:07:49","JDEMAAT","","airmiles2016HIEPHOI!", +"Ticketveiling https://www.ticketveiling.nl","2022-03-25 19:15:17","jantje345","","ticket2022!)", +"Bonprix","2020-10-15 19:37:23","janine@demaat.info","","Bbonie21!", +"Vakantie Veiling","2018-12-24 10:14:12","janine@demaat.info","","vak2016veling@#", +"Pinterest","2018-12-24 10:13:17","jappie","","pint@@@2016ABC", +"Media Markt","2018-12-24 10:12:49","janine@demaat.info","","ongelovelijk2017#$%", +"Wijgergangs Medical www.wijgergangsmedical.nl","2018-12-24 10:12:07","janine@demaat.info","","Medische2016$%", +"Love For Rain https://www.loveforrain.nl/","2018-12-24 10:10:51","janine@demaat.info","","love2017welkom12", +"KRUIDVAT","2018-12-24 10:09:51","janine@demaat.info","","kruidvat2016#$%", +"Deen","2018-12-24 10:09:11","janine@demaat.info","","Deen2016$%6", +"gall gall","2018-12-24 10:08:23","janine@demaat.info","","GALL2016gall@#", +"Iens Seatme","2018-12-24 10:06:57","janine@demaat.info","","SeatMe2017$%!", +"Tui Mijntui www.tui.nl/mijntui","2019-10-24 18:42:48","janine@demaat.info","janine@demaat.info","TuiBonaire2019!!", +"Gmail inloggen","2018-12-24 10:04:26","janine.de.maat@gmail.com","","xanderj2", +"ANWB","2022-12-06 15:02:56","JaninedeMaatANWB","janine@demaat.info","ANWB2017#$", +"Appie Albert Heijn","2018-12-24 10:01:01","janine@demaat.info","","Appie2017Hallo!", +"FTO https://medicijngebruik.nl/","2018-12-24 09:59:15","janine@demaat.info","","FTO%&%2017!", +"Bol Com","2021-03-18 20:44:09","janine@demaat.info","","BolCC202123", +"Joviene Lourens Massage","2018-12-17 21:59:48","Janine67","","Loure2017@#$", +"Concertgebouw","2018-12-17 21:57:38","janine@demaat.info","","2017ConcertGeb$%", +"Hema.nl","2019-08-25 10:51:14","janine@demaat.info","","HemaTheBest2019!", +"koopjedeal","2018-12-17 21:55:23","janine@demaat.info","","koop2017je%^deal", +"Health Investment https://www.lpx.nl/healthinvestment/login","2018-12-17 21:54:12","janine@demaat.info","","HealthInvest2017^%", +"Medisch contact","2020-10-25 14:41:46","janine@demaat.info","","MeDisch2020@@", +"VVAA","2018-12-17 21:49:51","013265","","VvAa2017%$#", +"https://www.pil-nascholing.nl","2020-12-20 21:06:49","JaninePiL","","PIL2021Janinex!!", +"Groupon","2018-12-17 21:44:02","janine@demaat.info","","Groupon2017top67", +"Top Bloemen","2018-12-17 21:42:37","janine@demaat.info","","TipTop1967#$", +"Albert Heijn bestellen thuisbezorgen prive","2018-12-17 21:42:16","janine@demaat.info","","Appie2017Hallo!", +"Praxisdienst.nl","2018-12-17 21:40:06","janine@demaat.info","","Praxis2017Dienst#$", +"Frascati","2018-12-17 21:39:29","janine@demaat.info","","fRxVtz", +"Bijenkorf.nl","2018-12-17 21:36:43","janine@demaat.info","","BijBij2017Bij#$", +"https://medicijngebruik.nl/ verandwoord medicijngebruik","2018-12-17 21:35:40","janine@demaat.info","","FTO%&%2017!", +"https://branderwines.nl/wijnshop/customer/account/login/","2018-12-17 21:26:00","janine@demaat.info","","RRRSuU_K", +"Mijn Promedico","2018-12-17 21:25:20","janine@demaat.info","","yI8xtB_E", +"We Fashion","2018-12-17 21:22:09","janine@demaat.info","","WeFashion2018$%", +"actie van de dag","2018-12-17 21:20:25","janine@demaat.info","","AcTie2018Van$%", +"Geneeskundeboek.nl","2018-12-17 21:19:48","janine@demaat.info","","geneeskunde2017$%", +"administratie Ignace en janine","2018-12-17 21:18:12","janine","","Xanderj", +"https://www.daxtrio.nl/customer/account/login/ DAXTRIO","2021-05-02 20:43:22","janine@demaat.info","","DaX2021&#", +"NPO start","2018-12-17 21:13:09","janine@demaat.info","","StartNPOHallo123", +"Praktijkspiegel https://vektis.okta-emea.com/login/login.htm?fromURI=/","2023-06-14 19:18:40","01022281@vektis.nl","","Halh18@#18!xx!", +"GHO GO https://www.ghogo.nl/wp-login.php","2018-12-17 20:56:29","jdemaat","","3PWdU5Nt31Ts)pjgWA#FP)5s ", +"Soap Treatments","2019-07-03 15:56:53","janine@demaat.info","0624276531","HelloBotox!@", +"https://www.ah.nl/kies-moment/bezorgen albert heijn","2018-12-17 20:52:09","huisartsdemaat@ezorg.nl","","AHis2018TOP", +"Bel Centrale","2018-12-17 20:50:43","janine@demaat.info","","Bellen222!@", +"Bohn Stafleu en van Loghum","2018-12-17 20:50:04","janine@demaat.info","","bsl2018Yes!", +"https://www.myheritage.nl/","2018-12-17 20:48:52","janine@demaat.info","","AfKomst2018!@", +"Huisarts Vandaag","2018-12-17 20:46:07","demaat","","VanDaag2018@#7", +"Belastingdienst Janine de Maat","2018-12-16 15:29:47","NL0013176906","","HelpAangifteDoen2017$%", +"Belastingdienst Huisarts van Muiden","2018-12-16 15:28:58","NL0050922414","","Huisarts15A$ViJa", +"VIP live","2021-06-11 08:33:18","JdeMaat","","DeMaat1967#$7 pincode 64971", +"KPN https://account.kpn.com/#/","2022-03-03 20:49:05","janine@demaat.info","Puk 31777541","64646 KPN2020ha!@", +"Zilveren Kruis Verstappen","2021-12-21 12:22:04","400079996","","Burgemeester15a@#!", +"Zilveren Kruis de Maat","2022-12-23 10:59:17","400079997","","ZilvKruis2021#$#!", +"NHG.org","2018-12-16 15:13:50","janine@demaat.info","","2012HAweb@#", +"LinkedIn","2018-12-17 22:01:13","janine@demaat.info","","LinkeIn2017#$%5", +"Independer","2022-12-06 16:42:45","janine@demaat.info","","InDEPEND2018$%!", +"https://www.centraalbeheer.nl/Paginas/default.aspx Centraal beheer","2018-11-10 22:18:32","janine2018BeHEER","","CenTRAAL2018@#", +"Movir https://mijnmovir.nl/MyMovirTheme/NoPermission.aspx","2023-02-26 14:07:45","janine@demaat.info","","Mo2018Vir$%2!23", +"https://mijn.belastingdienst.nl/ppa/ belastingdienst janine zakelijk","2018-11-10 22:12:34","NL0013176906","","HelpAangifteDoen2017$%", +"https://www.etos.nl/ ETOS","2018-11-10 22:02:54","janine@demaat.info","","INetos2018!@", +"https://www.ghogo.nl/wp-login.php GHOGO","2018-11-10 21:58:46","jdemaat","","3PWdU5Nt31Ts)pjgWA#FP)5s ", +"www.doq.nl doq","2018-11-10 21:57:04","maatDOQ","","DOQ2017demaat67%!", +"Spotify","2018-11-10 21:56:05","janinespotify2013","","SpoTy2018$%", +"https://www.ah.nl/kies-moment/bezorgen/1398BE albert heijn","2018-11-10 21:52:31","huisartsdemaat@ezorg.nl","","AHis2018TOP", +"www.belcentrale.nl","2018-11-10 21:50:37","janine@demaat.info","","Bellen222!@", +"https://mijn.bsl.nl/nascholing","2018-11-10 21:50:02","janine@demaat.info","","bsl2018Yes!", +"My Heritage","2018-11-10 21:47:58","janine@demaat.info","","AfKomst2018!@", +"NVDA","2018-12-17 20:46:56","huisartsdemaat@ezorg.nl","","Huisartsvanmuiden2017!", + diff --git a/static/Clouds.jpg b/static/Clouds.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26048b906ba8f2aa1b66bdb49f0188e72ee01ea5 GIT binary patch literal 232112 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

)B#4&+zXSCRW}HVHm8S#rVHTRk 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 z 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 literal 0 HcmV?d00001 diff --git a/static/Edit-icon.png b/static/Edit-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba7e6040dcea024785c917e5d1d5a484a17401b GIT binary patch literal 3792 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 for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito. All rights Reserved. + +***/ + +MochiKit.Base._deps('Async', ['Base']); + +MochiKit.Async.NAME = "MochiKit.Async"; +MochiKit.Async.VERSION = "1.4.2"; +MochiKit.Async.__repr__ = function () { + return "[" + this.NAME + " " + this.VERSION + "]"; +}; +MochiKit.Async.toString = function () { + return this.__repr__(); +}; + +/** @id MochiKit.Async.Deferred */ +MochiKit.Async.Deferred = function (/* optional */ canceller) { + this.chain = []; + this.id = this._nextId(); + this.fired = -1; + this.paused = 0; + this.results = [null, null]; + this.canceller = canceller; + this.silentlyCancelled = false; + this.chained = false; +}; + +MochiKit.Async.Deferred.prototype = { + /** @id MochiKit.Async.Deferred.prototype.repr */ + repr: function () { + var state; + if (this.fired == -1) { + state = 'unfired'; + } else if (this.fired === 0) { + state = 'success'; + } else { + state = 'error'; + } + return 'Deferred(' + this.id + ', ' + state + ')'; + }, + + toString: MochiKit.Base.forwardCall("repr"), + + _nextId: MochiKit.Base.counter(), + + /** @id MochiKit.Async.Deferred.prototype.cancel */ + cancel: function () { + var self = MochiKit.Async; + if (this.fired == -1) { + if (this.canceller) { + this.canceller(this); + } else { + this.silentlyCancelled = true; + } + if (this.fired == -1) { + this.errback(new self.CancelledError(this)); + } + } else if ((this.fired === 0) && (this.results[0] instanceof self.Deferred)) { + this.results[0].cancel(); + } + }, + + _resback: function (res) { + /*** + + The primitive that means either callback or errback + + ***/ + this.fired = ((res instanceof Error) ? 1 : 0); + this.results[this.fired] = res; + this._fire(); + }, + + _check: function () { + if (this.fired != -1) { + if (!this.silentlyCancelled) { + throw new MochiKit.Async.AlreadyCalledError(this); + } + this.silentlyCancelled = false; + return; + } + }, + + /** @id MochiKit.Async.Deferred.prototype.callback */ + callback: function (res) { + this._check(); + if (res instanceof MochiKit.Async.Deferred) { + throw new Error("Deferred instances can only be chained if they are the result of a callback"); + } + this._resback(res); + }, + + /** @id MochiKit.Async.Deferred.prototype.errback */ + errback: function (res) { + this._check(); + var self = MochiKit.Async; + if (res instanceof self.Deferred) { + throw new Error("Deferred instances can only be chained if they are the result of a callback"); + } + if (!(res instanceof Error)) { + res = new self.GenericError(res); + } + this._resback(res); + }, + + /** @id MochiKit.Async.Deferred.prototype.addBoth */ + addBoth: function (fn) { + if (arguments.length > 1) { + fn = MochiKit.Base.partial.apply(null, arguments); + } + return this.addCallbacks(fn, fn); + }, + + /** @id MochiKit.Async.Deferred.prototype.addCallback */ + addCallback: function (fn) { + if (arguments.length > 1) { + fn = MochiKit.Base.partial.apply(null, arguments); + } + return this.addCallbacks(fn, null); + }, + + /** @id MochiKit.Async.Deferred.prototype.addErrback */ + addErrback: function (fn) { + if (arguments.length > 1) { + fn = MochiKit.Base.partial.apply(null, arguments); + } + return this.addCallbacks(null, fn); + }, + + /** @id MochiKit.Async.Deferred.prototype.addCallbacks */ + addCallbacks: function (cb, eb) { + if (this.chained) { + throw new Error("Chained Deferreds can not be re-used"); + } + this.chain.push([cb, eb]); + if (this.fired >= 0) { + this._fire(); + } + return this; + }, + + _fire: function () { + /*** + + Used internally to exhaust the callback sequence when a result + is available. + + ***/ + var chain = this.chain; + var fired = this.fired; + var res = this.results[fired]; + var self = this; + var cb = null; + while (chain.length > 0 && this.paused === 0) { + // Array + var pair = chain.shift(); + var f = pair[fired]; + if (f === null) { + continue; + } + try { + res = f(res); + fired = ((res instanceof Error) ? 1 : 0); + if (res instanceof MochiKit.Async.Deferred) { + cb = function (res) { + self._resback(res); + self.paused--; + if ((self.paused === 0) && (self.fired >= 0)) { + self._fire(); + } + }; + this.paused++; + } + } catch (err) { + fired = 1; + if (!(err instanceof Error)) { + err = new MochiKit.Async.GenericError(err); + } + res = err; + } + } + this.fired = fired; + this.results[fired] = res; + if (cb && this.paused) { + // this is for "tail recursion" in case the dependent deferred + // is already fired + res.addBoth(cb); + res.chained = true; + } + } +}; + +MochiKit.Base.update(MochiKit.Async, { + /** @id MochiKit.Async.evalJSONRequest */ + evalJSONRequest: function (req) { + return MochiKit.Base.evalJSON(req.responseText); + }, + + /** @id MochiKit.Async.succeed */ + succeed: function (/* optional */result) { + var d = new MochiKit.Async.Deferred(); + d.callback.apply(d, arguments); + return d; + }, + + /** @id MochiKit.Async.fail */ + fail: function (/* optional */result) { + var d = new MochiKit.Async.Deferred(); + d.errback.apply(d, arguments); + return d; + }, + + /** @id MochiKit.Async.getXMLHttpRequest */ + getXMLHttpRequest: function () { + var self = arguments.callee; + if (!self.XMLHttpRequest) { + var tryThese = [ + function () { return new XMLHttpRequest(); }, + function () { return new ActiveXObject('Msxml2.XMLHTTP'); }, + function () { return new ActiveXObject('Microsoft.XMLHTTP'); }, + function () { return new ActiveXObject('Msxml2.XMLHTTP.4.0'); }, + function () { + throw new MochiKit.Async.BrowserComplianceError("Browser does not support XMLHttpRequest"); + } + ]; + for (var i = 0; i < tryThese.length; i++) { + var func = tryThese[i]; + try { + self.XMLHttpRequest = func; + return func(); + } catch (e) { + // pass + } + } + } + return self.XMLHttpRequest(); + }, + + _xhr_onreadystatechange: function (d) { + // MochiKit.Logging.logDebug('this.readyState', this.readyState); + var m = MochiKit.Base; + if (this.readyState == 4) { + // IE SUCKS + try { + this.onreadystatechange = null; + } catch (e) { + try { + this.onreadystatechange = m.noop; + } catch (e) { + } + } + var status = null; + try { + status = this.status; + if (!status && m.isNotEmpty(this.responseText)) { + // 0 or undefined seems to mean cached or local + status = 304; + } + } catch (e) { + // pass + // MochiKit.Logging.logDebug('error getting status?', repr(items(e))); + } + // 200 is OK, 201 is CREATED, 204 is NO CONTENT + // 304 is NOT MODIFIED, 1223 is apparently a bug in IE + if (status == 200 || status == 201 || status == 204 || + status == 304 || status == 1223) { + d.callback(this); + } else { + var err = new MochiKit.Async.XMLHttpRequestError(this, "Request failed"); + if (err.number) { + // XXX: This seems to happen on page change + d.errback(err); + } else { + // XXX: this seems to happen when the server is unreachable + d.errback(err); + } + } + } + }, + + _xhr_canceller: function (req) { + // IE SUCKS + try { + req.onreadystatechange = null; + } catch (e) { + try { + req.onreadystatechange = MochiKit.Base.noop; + } catch (e) { + } + } + req.abort(); + }, + + + /** @id MochiKit.Async.sendXMLHttpRequest */ + sendXMLHttpRequest: function (req, /* optional */ sendContent) { + if (typeof(sendContent) == "undefined" || sendContent === null) { + sendContent = ""; + } + + var m = MochiKit.Base; + var self = MochiKit.Async; + var d = new self.Deferred(m.partial(self._xhr_canceller, req)); + + try { + req.onreadystatechange = m.bind(self._xhr_onreadystatechange, + req, d); + req.send(sendContent); + } catch (e) { + try { + req.onreadystatechange = null; + } catch (ignore) { + // pass + } + d.errback(e); + } + + return d; + + }, + + /** @id MochiKit.Async.doXHR */ + doXHR: function (url, opts) { + /* + Work around a Firefox bug by dealing with XHR during + the next event loop iteration. Maybe it's this one: + https://bugzilla.mozilla.org/show_bug.cgi?id=249843 + */ + var self = MochiKit.Async; + return self.callLater(0, self._doXHR, url, opts); + }, + + _doXHR: function (url, opts) { + var m = MochiKit.Base; + opts = m.update({ + method: 'GET', + sendContent: '' + /* + queryString: undefined, + username: undefined, + password: undefined, + headers: undefined, + mimeType: undefined + */ + }, opts); + var self = MochiKit.Async; + var req = self.getXMLHttpRequest(); + if (opts.queryString) { + var qs = m.queryString(opts.queryString); + if (qs) { + url += "?" + qs; + } + } + // Safari will send undefined:undefined, so we have to check. + // We can't use apply, since the function is native. + if ('username' in opts) { + req.open(opts.method, url, true, opts.username, opts.password); + } else { + req.open(opts.method, url, true); + } + if (req.overrideMimeType && opts.mimeType) { + req.overrideMimeType(opts.mimeType); + } + req.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + if (opts.headers) { + var headers = opts.headers; + if (!m.isArrayLike(headers)) { + headers = m.items(headers); + } + for (var i = 0; i < headers.length; i++) { + var header = headers[i]; + var name = header[0]; + var value = header[1]; + req.setRequestHeader(name, value); + } + } + return self.sendXMLHttpRequest(req, opts.sendContent); + }, + + _buildURL: function (url/*, ...*/) { + if (arguments.length > 1) { + var m = MochiKit.Base; + var qs = m.queryString.apply(null, m.extend(null, arguments, 1)); + if (qs) { + return url + "?" + qs; + } + } + return url; + }, + + /** @id MochiKit.Async.doSimpleXMLHttpRequest */ + doSimpleXMLHttpRequest: function (url/*, ...*/) { + var self = MochiKit.Async; + url = self._buildURL.apply(self, arguments); + return self.doXHR(url); + }, + + /** @id MochiKit.Async.loadJSONDoc */ + loadJSONDoc: function (url/*, ...*/) { + var self = MochiKit.Async; + url = self._buildURL.apply(self, arguments); + var d = self.doXHR(url, { + 'mimeType': 'text/plain', + 'headers': [['Accept', 'application/json']] + }); + d = d.addCallback(self.evalJSONRequest); + return d; + }, + + /** @id MochiKit.Async.wait */ + wait: function (seconds, /* optional */value) { + var d = new MochiKit.Async.Deferred(); + var m = MochiKit.Base; + if (typeof(value) != 'undefined') { + d.addCallback(function () { return value; }); + } + var timeout = setTimeout( + m.bind("callback", d), + Math.floor(seconds * 1000)); + d.canceller = function () { + try { + clearTimeout(timeout); + } catch (e) { + // pass + } + }; + return d; + }, + + /** @id MochiKit.Async.callLater */ + callLater: function (seconds, func) { + var m = MochiKit.Base; + var pfunc = m.partial.apply(m, m.extend(null, arguments, 1)); + return MochiKit.Async.wait(seconds).addCallback( + function (res) { return pfunc(); } + ); + } +}); + + +/** @id MochiKit.Async.DeferredLock */ +MochiKit.Async.DeferredLock = function () { + this.waiting = []; + this.locked = false; + this.id = this._nextId(); +}; + +MochiKit.Async.DeferredLock.prototype = { + __class__: MochiKit.Async.DeferredLock, + /** @id MochiKit.Async.DeferredLock.prototype.acquire */ + acquire: function () { + var d = new MochiKit.Async.Deferred(); + if (this.locked) { + this.waiting.push(d); + } else { + this.locked = true; + d.callback(this); + } + return d; + }, + /** @id MochiKit.Async.DeferredLock.prototype.release */ + release: function () { + if (!this.locked) { + throw TypeError("Tried to release an unlocked DeferredLock"); + } + this.locked = false; + if (this.waiting.length > 0) { + this.locked = true; + this.waiting.shift().callback(this); + } + }, + _nextId: MochiKit.Base.counter(), + repr: function () { + var state; + if (this.locked) { + state = 'locked, ' + this.waiting.length + ' waiting'; + } else { + state = 'unlocked'; + } + return 'DeferredLock(' + this.id + ', ' + state + ')'; + }, + toString: MochiKit.Base.forwardCall("repr") + +}; + +/** @id MochiKit.Async.DeferredList */ +MochiKit.Async.DeferredList = function (list, /* optional */fireOnOneCallback, fireOnOneErrback, consumeErrors, canceller) { + + // call parent constructor + MochiKit.Async.Deferred.apply(this, [canceller]); + + this.list = list; + var resultList = []; + this.resultList = resultList; + + this.finishedCount = 0; + this.fireOnOneCallback = fireOnOneCallback; + this.fireOnOneErrback = fireOnOneErrback; + this.consumeErrors = consumeErrors; + + var cb = MochiKit.Base.bind(this._cbDeferred, this); + for (var i = 0; i < list.length; i++) { + var d = list[i]; + resultList.push(undefined); + d.addCallback(cb, i, true); + d.addErrback(cb, i, false); + } + + if (list.length === 0 && !fireOnOneCallback) { + this.callback(this.resultList); + } + +}; + +MochiKit.Async.DeferredList.prototype = new MochiKit.Async.Deferred(); + +MochiKit.Async.DeferredList.prototype._cbDeferred = function (index, succeeded, result) { + this.resultList[index] = [succeeded, result]; + this.finishedCount += 1; + if (this.fired == -1) { + if (succeeded && this.fireOnOneCallback) { + this.callback([index, result]); + } else if (!succeeded && this.fireOnOneErrback) { + this.errback(result); + } else if (this.finishedCount == this.list.length) { + this.callback(this.resultList); + } + } + if (!succeeded && this.consumeErrors) { + result = null; + } + return result; +}; + +/** @id MochiKit.Async.gatherResults */ +MochiKit.Async.gatherResults = function (deferredList) { + var d = new MochiKit.Async.DeferredList(deferredList, false, true, false); + d.addCallback(function (results) { + var ret = []; + for (var i = 0; i < results.length; i++) { + ret.push(results[i][1]); + } + return ret; + }); + return d; +}; + +/** @id MochiKit.Async.maybeDeferred */ +MochiKit.Async.maybeDeferred = function (func) { + var self = MochiKit.Async; + var result; + try { + var r = func.apply(null, MochiKit.Base.extend([], arguments, 1)); + if (r instanceof self.Deferred) { + result = r; + } else if (r instanceof Error) { + result = self.fail(r); + } else { + result = self.succeed(r); + } + } catch (e) { + result = self.fail(e); + } + return result; +}; + + +MochiKit.Async.EXPORT = [ + "AlreadyCalledError", + "CancelledError", + "BrowserComplianceError", + "GenericError", + "XMLHttpRequestError", + "Deferred", + "succeed", + "fail", + "getXMLHttpRequest", + "doSimpleXMLHttpRequest", + "loadJSONDoc", + "wait", + "callLater", + "sendXMLHttpRequest", + "DeferredLock", + "DeferredList", + "gatherResults", + "maybeDeferred", + "doXHR" +]; + +MochiKit.Async.EXPORT_OK = [ + "evalJSONRequest" +]; + +MochiKit.Async.__new__ = function () { + var m = MochiKit.Base; + var ne = m.partial(m._newNamedError, this); + + ne("AlreadyCalledError", + /** @id MochiKit.Async.AlreadyCalledError */ + function (deferred) { + /*** + + Raised by the Deferred if callback or errback happens + after it was already fired. + + ***/ + this.deferred = deferred; + } + ); + + ne("CancelledError", + /** @id MochiKit.Async.CancelledError */ + function (deferred) { + /*** + + Raised by the Deferred cancellation mechanism. + + ***/ + this.deferred = deferred; + } + ); + + ne("BrowserComplianceError", + /** @id MochiKit.Async.BrowserComplianceError */ + function (msg) { + /*** + + Raised when the JavaScript runtime is not capable of performing + the given function. Technically, this should really never be + raised because a non-conforming JavaScript runtime probably + isn't going to support exceptions in the first place. + + ***/ + this.message = msg; + } + ); + + ne("GenericError", + /** @id MochiKit.Async.GenericError */ + function (msg) { + this.message = msg; + } + ); + + ne("XMLHttpRequestError", + /** @id MochiKit.Async.XMLHttpRequestError */ + function (req, msg) { + /*** + + Raised when an XMLHttpRequest does not complete for any reason. + + ***/ + this.req = req; + this.message = msg; + try { + // Strange but true that this can raise in some cases. + this.number = req.status; + } catch (e) { + // pass + } + } + ); + + + this.EXPORT_TAGS = { + ":common": this.EXPORT, + ":all": m.concat(this.EXPORT, this.EXPORT_OK) + }; + + m.nameFunctions(this); + +}; + +MochiKit.Async.__new__(); + +MochiKit.Base._exportSymbols(this, MochiKit.Async); diff --git a/static/MochiKit/Base.js b/static/MochiKit/Base.js new file mode 100644 index 0000000..f3343f2 --- /dev/null +++ b/static/MochiKit/Base.js @@ -0,0 +1,1489 @@ +/*** + +MochiKit.Base 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito. All rights Reserved. + +***/ + +if (typeof(dojo) != 'undefined') { + dojo.provide("MochiKit.Base"); +} +if (typeof(MochiKit) == 'undefined') { + MochiKit = {}; +} +if (typeof(MochiKit.Base) == 'undefined') { + MochiKit.Base = {}; +} +if (typeof(MochiKit.__export__) == "undefined") { + MochiKit.__export__ = (MochiKit.__compat__ || + (typeof(JSAN) == 'undefined' && typeof(dojo) == 'undefined') + ); +} + +MochiKit.Base.VERSION = "1.4.2"; +MochiKit.Base.NAME = "MochiKit.Base"; +/** @id MochiKit.Base.update */ +MochiKit.Base.update = function (self, obj/*, ... */) { + if (self === null || self === undefined) { + self = {}; + } + for (var i = 1; i < arguments.length; i++) { + var o = arguments[i]; + if (typeof(o) != 'undefined' && o !== null) { + for (var k in o) { + self[k] = o[k]; + } + } + } + return self; +}; + +MochiKit.Base.update(MochiKit.Base, { + __repr__: function () { + return "[" + this.NAME + " " + this.VERSION + "]"; + }, + + toString: function () { + return this.__repr__(); + }, + + /** @id MochiKit.Base.camelize */ + camelize: function (selector) { + /* from dojo.style.toCamelCase */ + var arr = selector.split('-'); + var cc = arr[0]; + for (var i = 1; i < arr.length; i++) { + cc += arr[i].charAt(0).toUpperCase() + arr[i].substring(1); + } + return cc; + }, + + /** @id MochiKit.Base.counter */ + counter: function (n/* = 1 */) { + if (arguments.length === 0) { + n = 1; + } + return function () { + return n++; + }; + }, + + /** @id MochiKit.Base.clone */ + clone: function (obj) { + var me = arguments.callee; + if (arguments.length == 1) { + me.prototype = obj; + return new me(); + } + }, + + _deps: function(module, deps) { + if (!(module in MochiKit)) { + MochiKit[module] = {}; + } + + if (typeof(dojo) != 'undefined') { + dojo.provide('MochiKit.' + module); + } + for (var i = 0; i < deps.length; i++) { + if (typeof(dojo) != 'undefined') { + dojo.require('MochiKit.' + deps[i]); + } + if (typeof(JSAN) != 'undefined') { + JSAN.use('MochiKit.' + deps[i], []); + } + if (!(deps[i] in MochiKit)) { + throw 'MochiKit.' + module + ' depends on MochiKit.' + deps[i] + '!' + } + } + }, + + _flattenArray: function (res, lst) { + for (var i = 0; i < lst.length; i++) { + var o = lst[i]; + if (o instanceof Array) { + arguments.callee(res, o); + } else { + res.push(o); + } + } + return res; + }, + + /** @id MochiKit.Base.flattenArray */ + flattenArray: function (lst) { + return MochiKit.Base._flattenArray([], lst); + }, + + /** @id MochiKit.Base.flattenArguments */ + flattenArguments: function (lst/* ...*/) { + var res = []; + var m = MochiKit.Base; + var args = m.extend(null, arguments); + while (args.length) { + var o = args.shift(); + if (o && typeof(o) == "object" && typeof(o.length) == "number") { + for (var i = o.length - 1; i >= 0; i--) { + args.unshift(o[i]); + } + } else { + res.push(o); + } + } + return res; + }, + + /** @id MochiKit.Base.extend */ + extend: function (self, obj, /* optional */skip) { + // Extend an array with an array-like object starting + // from the skip index + if (!skip) { + skip = 0; + } + if (obj) { + // allow iterable fall-through, but skip the full isArrayLike + // check for speed, this is called often. + var l = obj.length; + if (typeof(l) != 'number' /* !isArrayLike(obj) */) { + if (typeof(MochiKit.Iter) != "undefined") { + obj = MochiKit.Iter.list(obj); + l = obj.length; + } else { + throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); + } + } + if (!self) { + self = []; + } + for (var i = skip; i < l; i++) { + self.push(obj[i]); + } + } + // This mutates, but it's convenient to return because + // it's often used like a constructor when turning some + // ghetto array-like to a real array + return self; + }, + + + /** @id MochiKit.Base.updatetree */ + updatetree: function (self, obj/*, ...*/) { + if (self === null || self === undefined) { + self = {}; + } + for (var i = 1; i < arguments.length; i++) { + var o = arguments[i]; + if (typeof(o) != 'undefined' && o !== null) { + for (var k in o) { + var v = o[k]; + if (typeof(self[k]) == 'object' && typeof(v) == 'object') { + arguments.callee(self[k], v); + } else { + self[k] = v; + } + } + } + } + return self; + }, + + /** @id MochiKit.Base.setdefault */ + setdefault: function (self, obj/*, ...*/) { + if (self === null || self === undefined) { + self = {}; + } + for (var i = 1; i < arguments.length; i++) { + var o = arguments[i]; + for (var k in o) { + if (!(k in self)) { + self[k] = o[k]; + } + } + } + return self; + }, + + /** @id MochiKit.Base.keys */ + keys: function (obj) { + var rval = []; + for (var prop in obj) { + rval.push(prop); + } + return rval; + }, + + /** @id MochiKit.Base.values */ + values: function (obj) { + var rval = []; + for (var prop in obj) { + rval.push(obj[prop]); + } + return rval; + }, + + /** @id MochiKit.Base.items */ + items: function (obj) { + var rval = []; + var e; + for (var prop in obj) { + var v; + try { + v = obj[prop]; + } catch (e) { + continue; + } + rval.push([prop, v]); + } + return rval; + }, + + + _newNamedError: function (module, name, func) { + func.prototype = new MochiKit.Base.NamedError(module.NAME + "." + name); + module[name] = func; + }, + + + /** @id MochiKit.Base.operator */ + operator: { + // unary logic operators + /** @id MochiKit.Base.truth */ + truth: function (a) { return !!a; }, + /** @id MochiKit.Base.lognot */ + lognot: function (a) { return !a; }, + /** @id MochiKit.Base.identity */ + identity: function (a) { return a; }, + + // bitwise unary operators + /** @id MochiKit.Base.not */ + not: function (a) { return ~a; }, + /** @id MochiKit.Base.neg */ + neg: function (a) { return -a; }, + + // binary operators + /** @id MochiKit.Base.add */ + add: function (a, b) { return a + b; }, + /** @id MochiKit.Base.sub */ + sub: function (a, b) { return a - b; }, + /** @id MochiKit.Base.div */ + div: function (a, b) { return a / b; }, + /** @id MochiKit.Base.mod */ + mod: function (a, b) { return a % b; }, + /** @id MochiKit.Base.mul */ + mul: function (a, b) { return a * b; }, + + // bitwise binary operators + /** @id MochiKit.Base.and */ + and: function (a, b) { return a & b; }, + /** @id MochiKit.Base.or */ + or: function (a, b) { return a | b; }, + /** @id MochiKit.Base.xor */ + xor: function (a, b) { return a ^ b; }, + /** @id MochiKit.Base.lshift */ + lshift: function (a, b) { return a << b; }, + /** @id MochiKit.Base.rshift */ + rshift: function (a, b) { return a >> b; }, + /** @id MochiKit.Base.zrshift */ + zrshift: function (a, b) { return a >>> b; }, + + // near-worthless built-in comparators + /** @id MochiKit.Base.eq */ + eq: function (a, b) { return a == b; }, + /** @id MochiKit.Base.ne */ + ne: function (a, b) { return a != b; }, + /** @id MochiKit.Base.gt */ + gt: function (a, b) { return a > b; }, + /** @id MochiKit.Base.ge */ + ge: function (a, b) { return a >= b; }, + /** @id MochiKit.Base.lt */ + lt: function (a, b) { return a < b; }, + /** @id MochiKit.Base.le */ + le: function (a, b) { return a <= b; }, + + // strict built-in comparators + seq: function (a, b) { return a === b; }, + sne: function (a, b) { return a !== b; }, + + // compare comparators + /** @id MochiKit.Base.ceq */ + ceq: function (a, b) { return MochiKit.Base.compare(a, b) === 0; }, + /** @id MochiKit.Base.cne */ + cne: function (a, b) { return MochiKit.Base.compare(a, b) !== 0; }, + /** @id MochiKit.Base.cgt */ + cgt: function (a, b) { return MochiKit.Base.compare(a, b) == 1; }, + /** @id MochiKit.Base.cge */ + cge: function (a, b) { return MochiKit.Base.compare(a, b) != -1; }, + /** @id MochiKit.Base.clt */ + clt: function (a, b) { return MochiKit.Base.compare(a, b) == -1; }, + /** @id MochiKit.Base.cle */ + cle: function (a, b) { return MochiKit.Base.compare(a, b) != 1; }, + + // binary logical operators + /** @id MochiKit.Base.logand */ + logand: function (a, b) { return a && b; }, + /** @id MochiKit.Base.logor */ + logor: function (a, b) { return a || b; }, + /** @id MochiKit.Base.contains */ + contains: function (a, b) { return b in a; } + }, + + /** @id MochiKit.Base.forwardCall */ + forwardCall: function (func) { + return function () { + return this[func].apply(this, arguments); + }; + }, + + /** @id MochiKit.Base.itemgetter */ + itemgetter: function (func) { + return function (arg) { + return arg[func]; + }; + }, + + /** @id MochiKit.Base.typeMatcher */ + typeMatcher: function (/* typ */) { + var types = {}; + for (var i = 0; i < arguments.length; i++) { + var typ = arguments[i]; + types[typ] = typ; + } + return function () { + for (var i = 0; i < arguments.length; i++) { + if (!(typeof(arguments[i]) in types)) { + return false; + } + } + return true; + }; + }, + + /** @id MochiKit.Base.isNull */ + isNull: function (/* ... */) { + for (var i = 0; i < arguments.length; i++) { + if (arguments[i] !== null) { + return false; + } + } + return true; + }, + + /** @id MochiKit.Base.isUndefinedOrNull */ + isUndefinedOrNull: function (/* ... */) { + for (var i = 0; i < arguments.length; i++) { + var o = arguments[i]; + if (!(typeof(o) == 'undefined' || o === null)) { + return false; + } + } + return true; + }, + + /** @id MochiKit.Base.isEmpty */ + isEmpty: function (obj) { + return !MochiKit.Base.isNotEmpty.apply(this, arguments); + }, + + /** @id MochiKit.Base.isNotEmpty */ + isNotEmpty: function (obj) { + for (var i = 0; i < arguments.length; i++) { + var o = arguments[i]; + if (!(o && o.length)) { + return false; + } + } + return true; + }, + + /** @id MochiKit.Base.isArrayLike */ + isArrayLike: function () { + for (var i = 0; i < arguments.length; i++) { + var o = arguments[i]; + var typ = typeof(o); + if ( + (typ != 'object' && !(typ == 'function' && typeof(o.item) == 'function')) || + o === null || + typeof(o.length) != 'number' || + o.nodeType === 3 || + o.nodeType === 4 + ) { + return false; + } + } + return true; + }, + + /** @id MochiKit.Base.isDateLike */ + isDateLike: function () { + for (var i = 0; i < arguments.length; i++) { + var o = arguments[i]; + if (typeof(o) != "object" || o === null + || typeof(o.getTime) != 'function') { + return false; + } + } + return true; + }, + + + /** @id MochiKit.Base.xmap */ + xmap: function (fn/*, obj... */) { + if (fn === null) { + return MochiKit.Base.extend(null, arguments, 1); + } + var rval = []; + for (var i = 1; i < arguments.length; i++) { + rval.push(fn(arguments[i])); + } + return rval; + }, + + /** @id MochiKit.Base.map */ + map: function (fn, lst/*, lst... */) { + var m = MochiKit.Base; + var itr = MochiKit.Iter; + var isArrayLike = m.isArrayLike; + if (arguments.length <= 2) { + // allow an iterable to be passed + if (!isArrayLike(lst)) { + if (itr) { + // fast path for map(null, iterable) + lst = itr.list(lst); + if (fn === null) { + return lst; + } + } else { + throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); + } + } + // fast path for map(null, lst) + if (fn === null) { + return m.extend(null, lst); + } + // disabled fast path for map(fn, lst) + /* + if (false && typeof(Array.prototype.map) == 'function') { + // Mozilla fast-path + return Array.prototype.map.call(lst, fn); + } + */ + var rval = []; + for (var i = 0; i < lst.length; i++) { + rval.push(fn(lst[i])); + } + return rval; + } else { + // default for map(null, ...) is zip(...) + if (fn === null) { + fn = Array; + } + var length = null; + for (i = 1; i < arguments.length; i++) { + // allow iterables to be passed + if (!isArrayLike(arguments[i])) { + if (itr) { + return itr.list(itr.imap.apply(null, arguments)); + } else { + throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); + } + } + // find the minimum length + var l = arguments[i].length; + if (length === null || length > l) { + length = l; + } + } + rval = []; + for (i = 0; i < length; i++) { + var args = []; + for (var j = 1; j < arguments.length; j++) { + args.push(arguments[j][i]); + } + rval.push(fn.apply(this, args)); + } + return rval; + } + }, + + /** @id MochiKit.Base.xfilter */ + xfilter: function (fn/*, obj... */) { + var rval = []; + if (fn === null) { + fn = MochiKit.Base.operator.truth; + } + for (var i = 1; i < arguments.length; i++) { + var o = arguments[i]; + if (fn(o)) { + rval.push(o); + } + } + return rval; + }, + + /** @id MochiKit.Base.filter */ + filter: function (fn, lst, self) { + var rval = []; + // allow an iterable to be passed + var m = MochiKit.Base; + if (!m.isArrayLike(lst)) { + if (MochiKit.Iter) { + lst = MochiKit.Iter.list(lst); + } else { + throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); + } + } + if (fn === null) { + fn = m.operator.truth; + } + if (typeof(Array.prototype.filter) == 'function') { + // Mozilla fast-path + return Array.prototype.filter.call(lst, fn, self); + } else if (typeof(self) == 'undefined' || self === null) { + for (var i = 0; i < lst.length; i++) { + var o = lst[i]; + if (fn(o)) { + rval.push(o); + } + } + } else { + for (i = 0; i < lst.length; i++) { + o = lst[i]; + if (fn.call(self, o)) { + rval.push(o); + } + } + } + return rval; + }, + + + _wrapDumbFunction: function (func) { + return function () { + // fast path! + switch (arguments.length) { + case 0: return func(); + case 1: return func(arguments[0]); + case 2: return func(arguments[0], arguments[1]); + case 3: return func(arguments[0], arguments[1], arguments[2]); + } + var args = []; + for (var i = 0; i < arguments.length; i++) { + args.push("arguments[" + i + "]"); + } + return eval("(func(" + args.join(",") + "))"); + }; + }, + + /** @id MochiKit.Base.methodcaller */ + methodcaller: function (func/*, args... */) { + var args = MochiKit.Base.extend(null, arguments, 1); + if (typeof(func) == "function") { + return function (obj) { + return func.apply(obj, args); + }; + } else { + return function (obj) { + return obj[func].apply(obj, args); + }; + } + }, + + /** @id MochiKit.Base.method */ + method: function (self, func) { + var m = MochiKit.Base; + return m.bind.apply(this, m.extend([func, self], arguments, 2)); + }, + + /** @id MochiKit.Base.compose */ + compose: function (f1, f2/*, f3, ... fN */) { + var fnlist = []; + var m = MochiKit.Base; + if (arguments.length === 0) { + throw new TypeError("compose() requires at least one argument"); + } + for (var i = 0; i < arguments.length; i++) { + var fn = arguments[i]; + if (typeof(fn) != "function") { + throw new TypeError(m.repr(fn) + " is not a function"); + } + fnlist.push(fn); + } + return function () { + var args = arguments; + for (var i = fnlist.length - 1; i >= 0; i--) { + args = [fnlist[i].apply(this, args)]; + } + return args[0]; + }; + }, + + /** @id MochiKit.Base.bind */ + bind: function (func, self/* args... */) { + if (typeof(func) == "string") { + func = self[func]; + } + var im_func = func.im_func; + var im_preargs = func.im_preargs; + var im_self = func.im_self; + var m = MochiKit.Base; + if (typeof(func) == "function" && typeof(func.apply) == "undefined") { + // this is for cases where JavaScript sucks ass and gives you a + // really dumb built-in function like alert() that doesn't have + // an apply + func = m._wrapDumbFunction(func); + } + if (typeof(im_func) != 'function') { + im_func = func; + } + if (typeof(self) != 'undefined') { + im_self = self; + } + if (typeof(im_preargs) == 'undefined') { + im_preargs = []; + } else { + im_preargs = im_preargs.slice(); + } + m.extend(im_preargs, arguments, 2); + var newfunc = function () { + var args = arguments; + var me = arguments.callee; + if (me.im_preargs.length > 0) { + args = m.concat(me.im_preargs, args); + } + var self = me.im_self; + if (!self) { + self = this; + } + return me.im_func.apply(self, args); + }; + newfunc.im_self = im_self; + newfunc.im_func = im_func; + newfunc.im_preargs = im_preargs; + return newfunc; + }, + + /** @id MochiKit.Base.bindLate */ + bindLate: function (func, self/* args... */) { + var m = MochiKit.Base; + if (typeof(func) != "string") { + return m.bind.apply(this, arguments); + } + var im_preargs = m.extend([], arguments, 2); + var newfunc = function () { + var args = arguments; + var me = arguments.callee; + if (me.im_preargs.length > 0) { + args = m.concat(me.im_preargs, args); + } + var self = me.im_self; + if (!self) { + self = this; + } + return self[me.im_func].apply(self, args); + }; + newfunc.im_self = self; + newfunc.im_func = func; + newfunc.im_preargs = im_preargs; + return newfunc; + }, + + /** @id MochiKit.Base.bindMethods */ + bindMethods: function (self) { + var bind = MochiKit.Base.bind; + for (var k in self) { + var func = self[k]; + if (typeof(func) == 'function') { + self[k] = bind(func, self); + } + } + }, + + /** @id MochiKit.Base.registerComparator */ + registerComparator: function (name, check, comparator, /* optional */ override) { + MochiKit.Base.comparatorRegistry.register(name, check, comparator, override); + }, + + _primitives: {'boolean': true, 'string': true, 'number': true}, + + /** @id MochiKit.Base.compare */ + compare: function (a, b) { + if (a == b) { + return 0; + } + var aIsNull = (typeof(a) == 'undefined' || a === null); + var bIsNull = (typeof(b) == 'undefined' || b === null); + if (aIsNull && bIsNull) { + return 0; + } else if (aIsNull) { + return -1; + } else if (bIsNull) { + return 1; + } + var m = MochiKit.Base; + // bool, number, string have meaningful comparisons + var prim = m._primitives; + if (!(typeof(a) in prim && typeof(b) in prim)) { + try { + return m.comparatorRegistry.match(a, b); + } catch (e) { + if (e != m.NotFound) { + throw e; + } + } + } + if (a < b) { + return -1; + } else if (a > b) { + return 1; + } + // These types can't be compared + var repr = m.repr; + throw new TypeError(repr(a) + " and " + repr(b) + " can not be compared"); + }, + + /** @id MochiKit.Base.compareDateLike */ + compareDateLike: function (a, b) { + return MochiKit.Base.compare(a.getTime(), b.getTime()); + }, + + /** @id MochiKit.Base.compareArrayLike */ + compareArrayLike: function (a, b) { + var compare = MochiKit.Base.compare; + var count = a.length; + var rval = 0; + if (count > b.length) { + rval = 1; + count = b.length; + } else if (count < b.length) { + rval = -1; + } + for (var i = 0; i < count; i++) { + var cmp = compare(a[i], b[i]); + if (cmp) { + return cmp; + } + } + return rval; + }, + + /** @id MochiKit.Base.registerRepr */ + registerRepr: function (name, check, wrap, /* optional */override) { + MochiKit.Base.reprRegistry.register(name, check, wrap, override); + }, + + /** @id MochiKit.Base.repr */ + repr: function (o) { + if (typeof(o) == "undefined") { + return "undefined"; + } else if (o === null) { + return "null"; + } + try { + if (typeof(o.__repr__) == 'function') { + return o.__repr__(); + } else if (typeof(o.repr) == 'function' && o.repr != arguments.callee) { + return o.repr(); + } + return MochiKit.Base.reprRegistry.match(o); + } catch (e) { + if (typeof(o.NAME) == 'string' && ( + o.toString == Function.prototype.toString || + o.toString == Object.prototype.toString + )) { + return o.NAME; + } + } + try { + var ostring = (o + ""); + } catch (e) { + return "[" + typeof(o) + "]"; + } + if (typeof(o) == "function") { + ostring = ostring.replace(/^\s+/, "").replace(/\s+/g, " "); + ostring = ostring.replace(/,(\S)/, ", $1"); + var idx = ostring.indexOf("{"); + if (idx != -1) { + ostring = ostring.substr(0, idx) + "{...}"; + } + } + return ostring; + }, + + /** @id MochiKit.Base.reprArrayLike */ + reprArrayLike: function (o) { + var m = MochiKit.Base; + return "[" + m.map(m.repr, o).join(", ") + "]"; + }, + + /** @id MochiKit.Base.reprString */ + reprString: function (o) { + return ('"' + o.replace(/(["\\])/g, '\\$1') + '"' + ).replace(/[\f]/g, "\\f" + ).replace(/[\b]/g, "\\b" + ).replace(/[\n]/g, "\\n" + ).replace(/[\t]/g, "\\t" + ).replace(/[\v]/g, "\\v" + ).replace(/[\r]/g, "\\r"); + }, + + /** @id MochiKit.Base.reprNumber */ + reprNumber: function (o) { + return o + ""; + }, + + /** @id MochiKit.Base.registerJSON */ + registerJSON: function (name, check, wrap, /* optional */override) { + MochiKit.Base.jsonRegistry.register(name, check, wrap, override); + }, + + + /** @id MochiKit.Base.evalJSON */ + evalJSON: function () { + return eval("(" + MochiKit.Base._filterJSON(arguments[0]) + ")"); + }, + + _filterJSON: function (s) { + var m = s.match(/^\s*\/\*(.*)\*\/\s*$/); + if (m) { + return m[1]; + } + return s; + }, + + /** @id MochiKit.Base.serializeJSON */ + serializeJSON: function (o) { + var objtype = typeof(o); + if (objtype == "number" || objtype == "boolean") { + return o + ""; + } else if (o === null) { + return "null"; + } else if (objtype == "string") { + var res = ""; + for (var i = 0; i < o.length; i++) { + var c = o.charAt(i); + if (c == '\"') { + res += '\\"'; + } else if (c == '\\') { + res += '\\\\'; + } else if (c == '\b') { + res += '\\b'; + } else if (c == '\f') { + res += '\\f'; + } else if (c == '\n') { + res += '\\n'; + } else if (c == '\r') { + res += '\\r'; + } else if (c == '\t') { + res += '\\t'; + } else if (o.charCodeAt(i) <= 0x1F) { + var hex = o.charCodeAt(i).toString(16); + if (hex.length < 2) { + hex = '0' + hex; + } + res += '\\u00' + hex.toUpperCase(); + } else { + res += c; + } + } + return '"' + res + '"'; + } + // recurse + var me = arguments.callee; + // short-circuit for objects that support "json" serialization + // if they return "self" then just pass-through... + var newObj; + if (typeof(o.__json__) == "function") { + newObj = o.__json__(); + if (o !== newObj) { + return me(newObj); + } + } + if (typeof(o.json) == "function") { + newObj = o.json(); + if (o !== newObj) { + return me(newObj); + } + } + // array + if (objtype != "function" && typeof(o.length) == "number") { + var res = []; + for (var i = 0; i < o.length; i++) { + var val = me(o[i]); + if (typeof(val) != "string") { + // skip non-serializable values + continue; + } + res.push(val); + } + return "[" + res.join(", ") + "]"; + } + // look in the registry + var m = MochiKit.Base; + try { + newObj = m.jsonRegistry.match(o); + if (o !== newObj) { + return me(newObj); + } + } catch (e) { + if (e != m.NotFound) { + // something really bad happened + throw e; + } + } + // undefined is outside of the spec + if (objtype == "undefined") { + throw new TypeError("undefined can not be serialized as JSON"); + } + // it's a function with no adapter, bad + if (objtype == "function") { + return null; + } + // generic object code path + res = []; + for (var k in o) { + var useKey; + if (typeof(k) == "number") { + useKey = '"' + k + '"'; + } else if (typeof(k) == "string") { + useKey = me(k); + } else { + // skip non-string or number keys + continue; + } + val = me(o[k]); + if (typeof(val) != "string") { + // skip non-serializable values + continue; + } + res.push(useKey + ":" + val); + } + return "{" + res.join(", ") + "}"; + }, + + + /** @id MochiKit.Base.objEqual */ + objEqual: function (a, b) { + return (MochiKit.Base.compare(a, b) === 0); + }, + + /** @id MochiKit.Base.arrayEqual */ + arrayEqual: function (self, arr) { + if (self.length != arr.length) { + return false; + } + return (MochiKit.Base.compare(self, arr) === 0); + }, + + /** @id MochiKit.Base.concat */ + concat: function (/* lst... */) { + var rval = []; + var extend = MochiKit.Base.extend; + for (var i = 0; i < arguments.length; i++) { + extend(rval, arguments[i]); + } + return rval; + }, + + /** @id MochiKit.Base.keyComparator */ + keyComparator: function (key/* ... */) { + // fast-path for single key comparisons + var m = MochiKit.Base; + var compare = m.compare; + if (arguments.length == 1) { + return function (a, b) { + return compare(a[key], b[key]); + }; + } + var compareKeys = m.extend(null, arguments); + return function (a, b) { + var rval = 0; + // keep comparing until something is inequal or we run out of + // keys to compare + for (var i = 0; (rval === 0) && (i < compareKeys.length); i++) { + var key = compareKeys[i]; + rval = compare(a[key], b[key]); + } + return rval; + }; + }, + + /** @id MochiKit.Base.reverseKeyComparator */ + reverseKeyComparator: function (key) { + var comparator = MochiKit.Base.keyComparator.apply(this, arguments); + return function (a, b) { + return comparator(b, a); + }; + }, + + /** @id MochiKit.Base.partial */ + partial: function (func) { + var m = MochiKit.Base; + return m.bind.apply(this, m.extend([func, undefined], arguments, 1)); + }, + + /** @id MochiKit.Base.listMinMax */ + listMinMax: function (which, lst) { + if (lst.length === 0) { + return null; + } + var cur = lst[0]; + var compare = MochiKit.Base.compare; + for (var i = 1; i < lst.length; i++) { + var o = lst[i]; + if (compare(o, cur) == which) { + cur = o; + } + } + return cur; + }, + + /** @id MochiKit.Base.objMax */ + objMax: function (/* obj... */) { + return MochiKit.Base.listMinMax(1, arguments); + }, + + /** @id MochiKit.Base.objMin */ + objMin: function (/* obj... */) { + return MochiKit.Base.listMinMax(-1, arguments); + }, + + /** @id MochiKit.Base.findIdentical */ + findIdentical: function (lst, value, start/* = 0 */, /* optional */end) { + if (typeof(end) == "undefined" || end === null) { + end = lst.length; + } + if (typeof(start) == "undefined" || start === null) { + start = 0; + } + for (var i = start; i < end; i++) { + if (lst[i] === value) { + return i; + } + } + return -1; + }, + + /** @id MochiKit.Base.mean */ + mean: function(/* lst... */) { + /* http://www.nist.gov/dads/HTML/mean.html */ + var sum = 0; + + var m = MochiKit.Base; + var args = m.extend(null, arguments); + var count = args.length; + + while (args.length) { + var o = args.shift(); + if (o && typeof(o) == "object" && typeof(o.length) == "number") { + count += o.length - 1; + for (var i = o.length - 1; i >= 0; i--) { + sum += o[i]; + } + } else { + sum += o; + } + } + + if (count <= 0) { + throw new TypeError('mean() requires at least one argument'); + } + + return sum/count; + }, + + /** @id MochiKit.Base.median */ + median: function(/* lst... */) { + /* http://www.nist.gov/dads/HTML/median.html */ + var data = MochiKit.Base.flattenArguments(arguments); + if (data.length === 0) { + throw new TypeError('median() requires at least one argument'); + } + data.sort(compare); + if (data.length % 2 == 0) { + var upper = data.length / 2; + return (data[upper] + data[upper - 1]) / 2; + } else { + return data[(data.length - 1) / 2]; + } + }, + + /** @id MochiKit.Base.findValue */ + findValue: function (lst, value, start/* = 0 */, /* optional */end) { + if (typeof(end) == "undefined" || end === null) { + end = lst.length; + } + if (typeof(start) == "undefined" || start === null) { + start = 0; + } + var cmp = MochiKit.Base.compare; + for (var i = start; i < end; i++) { + if (cmp(lst[i], value) === 0) { + return i; + } + } + return -1; + }, + + /** @id MochiKit.Base.nodeWalk */ + nodeWalk: function (node, visitor) { + var nodes = [node]; + var extend = MochiKit.Base.extend; + while (nodes.length) { + var res = visitor(nodes.shift()); + if (res) { + extend(nodes, res); + } + } + }, + + + /** @id MochiKit.Base.nameFunctions */ + nameFunctions: function (namespace) { + var base = namespace.NAME; + if (typeof(base) == 'undefined') { + base = ''; + } else { + base = base + '.'; + } + for (var name in namespace) { + var o = namespace[name]; + if (typeof(o) == 'function' && typeof(o.NAME) == 'undefined') { + try { + o.NAME = base + name; + } catch (e) { + // pass + } + } + } + }, + + + /** @id MochiKit.Base.queryString */ + queryString: function (names, values) { + // check to see if names is a string or a DOM element, and if + // MochiKit.DOM is available. If so, drop it like it's a form + // Ugliest conditional in MochiKit? Probably! + if (typeof(MochiKit.DOM) != "undefined" && arguments.length == 1 + && (typeof(names) == "string" || ( + typeof(names.nodeType) != "undefined" && names.nodeType > 0 + )) + ) { + var kv = MochiKit.DOM.formContents(names); + names = kv[0]; + values = kv[1]; + } else if (arguments.length == 1) { + // Allow the return value of formContents to be passed directly + if (typeof(names.length) == "number" && names.length == 2) { + return arguments.callee(names[0], names[1]); + } + var o = names; + names = []; + values = []; + for (var k in o) { + var v = o[k]; + if (typeof(v) == "function") { + continue; + } else if (MochiKit.Base.isArrayLike(v)){ + for (var i = 0; i < v.length; i++) { + names.push(k); + values.push(v[i]); + } + } else { + names.push(k); + values.push(v); + } + } + } + var rval = []; + var len = Math.min(names.length, values.length); + var urlEncode = MochiKit.Base.urlEncode; + for (var i = 0; i < len; i++) { + v = values[i]; + if (typeof(v) != 'undefined' && v !== null) { + rval.push(urlEncode(names[i]) + "=" + urlEncode(v)); + } + } + return rval.join("&"); + }, + + + /** @id MochiKit.Base.parseQueryString */ + parseQueryString: function (encodedString, useArrays) { + // strip a leading '?' from the encoded string + var qstr = (encodedString.charAt(0) == "?") + ? encodedString.substring(1) + : encodedString; + var pairs = qstr.replace(/\+/g, "%20").split(/\&\;|\&\#38\;|\&|\&/); + var o = {}; + var decode; + if (typeof(decodeURIComponent) != "undefined") { + decode = decodeURIComponent; + } else { + decode = unescape; + } + if (useArrays) { + for (var i = 0; i < pairs.length; i++) { + var pair = pairs[i].split("="); + var name = decode(pair.shift()); + if (!name) { + continue; + } + var arr = o[name]; + if (!(arr instanceof Array)) { + arr = []; + o[name] = arr; + } + arr.push(decode(pair.join("="))); + } + } else { + for (i = 0; i < pairs.length; i++) { + pair = pairs[i].split("="); + var name = pair.shift(); + if (!name) { + continue; + } + o[decode(name)] = decode(pair.join("=")); + } + } + return o; + } +}); + +/** @id MochiKit.Base.AdapterRegistry */ +MochiKit.Base.AdapterRegistry = function () { + this.pairs = []; +}; + +MochiKit.Base.AdapterRegistry.prototype = { + /** @id MochiKit.Base.AdapterRegistry.prototype.register */ + register: function (name, check, wrap, /* optional */ override) { + if (override) { + this.pairs.unshift([name, check, wrap]); + } else { + this.pairs.push([name, check, wrap]); + } + }, + + /** @id MochiKit.Base.AdapterRegistry.prototype.match */ + match: function (/* ... */) { + for (var i = 0; i < this.pairs.length; i++) { + var pair = this.pairs[i]; + if (pair[1].apply(this, arguments)) { + return pair[2].apply(this, arguments); + } + } + throw MochiKit.Base.NotFound; + }, + + /** @id MochiKit.Base.AdapterRegistry.prototype.unregister */ + unregister: function (name) { + for (var i = 0; i < this.pairs.length; i++) { + var pair = this.pairs[i]; + if (pair[0] == name) { + this.pairs.splice(i, 1); + return true; + } + } + return false; + } +}; + + +MochiKit.Base.EXPORT = [ + "flattenArray", + "noop", + "camelize", + "counter", + "clone", + "extend", + "update", + "updatetree", + "setdefault", + "keys", + "values", + "items", + "NamedError", + "operator", + "forwardCall", + "itemgetter", + "typeMatcher", + "isCallable", + "isUndefined", + "isUndefinedOrNull", + "isNull", + "isEmpty", + "isNotEmpty", + "isArrayLike", + "isDateLike", + "xmap", + "map", + "xfilter", + "filter", + "methodcaller", + "compose", + "bind", + "bindLate", + "bindMethods", + "NotFound", + "AdapterRegistry", + "registerComparator", + "compare", + "registerRepr", + "repr", + "objEqual", + "arrayEqual", + "concat", + "keyComparator", + "reverseKeyComparator", + "partial", + "merge", + "listMinMax", + "listMax", + "listMin", + "objMax", + "objMin", + "nodeWalk", + "zip", + "urlEncode", + "queryString", + "serializeJSON", + "registerJSON", + "evalJSON", + "parseQueryString", + "findValue", + "findIdentical", + "flattenArguments", + "method", + "average", + "mean", + "median" +]; + +MochiKit.Base.EXPORT_OK = [ + "nameFunctions", + "comparatorRegistry", + "reprRegistry", + "jsonRegistry", + "compareDateLike", + "compareArrayLike", + "reprArrayLike", + "reprString", + "reprNumber" +]; + +MochiKit.Base._exportSymbols = function (globals, module) { + if (!MochiKit.__export__) { + return; + } + var all = module.EXPORT_TAGS[":all"]; + for (var i = 0; i < all.length; i++) { + globals[all[i]] = module[all[i]]; + } +}; + +MochiKit.Base.__new__ = function () { + // A singleton raised when no suitable adapter is found + var m = this; + + // convenience + /** @id MochiKit.Base.noop */ + m.noop = m.operator.identity; + + // Backwards compat + m.forward = m.forwardCall; + m.find = m.findValue; + + if (typeof(encodeURIComponent) != "undefined") { + /** @id MochiKit.Base.urlEncode */ + m.urlEncode = function (unencoded) { + return encodeURIComponent(unencoded).replace(/\'/g, '%27'); + }; + } else { + m.urlEncode = function (unencoded) { + return escape(unencoded + ).replace(/\+/g, '%2B' + ).replace(/\"/g,'%22' + ).rval.replace(/\'/g, '%27'); + }; + } + + /** @id MochiKit.Base.NamedError */ + m.NamedError = function (name) { + this.message = name; + this.name = name; + }; + m.NamedError.prototype = new Error(); + m.update(m.NamedError.prototype, { + repr: function () { + if (this.message && this.message != this.name) { + return this.name + "(" + m.repr(this.message) + ")"; + } else { + return this.name + "()"; + } + }, + toString: m.forwardCall("repr") + }); + + /** @id MochiKit.Base.NotFound */ + m.NotFound = new m.NamedError("MochiKit.Base.NotFound"); + + + /** @id MochiKit.Base.listMax */ + m.listMax = m.partial(m.listMinMax, 1); + /** @id MochiKit.Base.listMin */ + m.listMin = m.partial(m.listMinMax, -1); + + /** @id MochiKit.Base.isCallable */ + m.isCallable = m.typeMatcher('function'); + /** @id MochiKit.Base.isUndefined */ + m.isUndefined = m.typeMatcher('undefined'); + + /** @id MochiKit.Base.merge */ + m.merge = m.partial(m.update, null); + /** @id MochiKit.Base.zip */ + m.zip = m.partial(m.map, null); + + /** @id MochiKit.Base.average */ + m.average = m.mean; + + /** @id MochiKit.Base.comparatorRegistry */ + m.comparatorRegistry = new m.AdapterRegistry(); + m.registerComparator("dateLike", m.isDateLike, m.compareDateLike); + m.registerComparator("arrayLike", m.isArrayLike, m.compareArrayLike); + + /** @id MochiKit.Base.reprRegistry */ + m.reprRegistry = new m.AdapterRegistry(); + m.registerRepr("arrayLike", m.isArrayLike, m.reprArrayLike); + m.registerRepr("string", m.typeMatcher("string"), m.reprString); + m.registerRepr("numbers", m.typeMatcher("number", "boolean"), m.reprNumber); + + /** @id MochiKit.Base.jsonRegistry */ + m.jsonRegistry = new m.AdapterRegistry(); + + var all = m.concat(m.EXPORT, m.EXPORT_OK); + m.EXPORT_TAGS = { + ":common": m.concat(m.EXPORT_OK), + ":all": all + }; + + m.nameFunctions(this); + +}; + +MochiKit.Base.__new__(); + +// +// XXX: Internet Explorer blows +// +if (MochiKit.__export__) { + compare = MochiKit.Base.compare; + compose = MochiKit.Base.compose; + serializeJSON = MochiKit.Base.serializeJSON; + mean = MochiKit.Base.mean; + median = MochiKit.Base.median; +} + +MochiKit.Base._exportSymbols(this, MochiKit.Base); diff --git a/static/MochiKit/Color.js b/static/MochiKit/Color.js new file mode 100644 index 0000000..a0d5bd8 --- /dev/null +++ b/static/MochiKit/Color.js @@ -0,0 +1,863 @@ +/*** + +MochiKit.Color 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito and others. All rights Reserved. + +***/ + +MochiKit.Base._deps('Color', ['Base', 'DOM', 'Style']); + +MochiKit.Color.NAME = "MochiKit.Color"; +MochiKit.Color.VERSION = "1.4.2"; + +MochiKit.Color.__repr__ = function () { + return "[" + this.NAME + " " + this.VERSION + "]"; +}; + +MochiKit.Color.toString = function () { + return this.__repr__(); +}; + + +/** @id MochiKit.Color.Color */ +MochiKit.Color.Color = function (red, green, blue, alpha) { + if (typeof(alpha) == 'undefined' || alpha === null) { + alpha = 1.0; + } + this.rgb = { + r: red, + g: green, + b: blue, + a: alpha + }; +}; + + +// Prototype methods + +MochiKit.Color.Color.prototype = { + + __class__: MochiKit.Color.Color, + + /** @id MochiKit.Color.Color.prototype.colorWithAlpha */ + colorWithAlpha: function (alpha) { + var rgb = this.rgb; + var m = MochiKit.Color; + return m.Color.fromRGB(rgb.r, rgb.g, rgb.b, alpha); + }, + + /** @id MochiKit.Color.Color.prototype.colorWithHue */ + colorWithHue: function (hue) { + // get an HSL model, and set the new hue... + var hsl = this.asHSL(); + hsl.h = hue; + var m = MochiKit.Color; + // convert back to RGB... + return m.Color.fromHSL(hsl); + }, + + /** @id MochiKit.Color.Color.prototype.colorWithSaturation */ + colorWithSaturation: function (saturation) { + // get an HSL model, and set the new hue... + var hsl = this.asHSL(); + hsl.s = saturation; + var m = MochiKit.Color; + // convert back to RGB... + return m.Color.fromHSL(hsl); + }, + + /** @id MochiKit.Color.Color.prototype.colorWithLightness */ + colorWithLightness: function (lightness) { + // get an HSL model, and set the new hue... + var hsl = this.asHSL(); + hsl.l = lightness; + var m = MochiKit.Color; + // convert back to RGB... + return m.Color.fromHSL(hsl); + }, + + /** @id MochiKit.Color.Color.prototype.darkerColorWithLevel */ + darkerColorWithLevel: function (level) { + var hsl = this.asHSL(); + hsl.l = Math.max(hsl.l - level, 0); + var m = MochiKit.Color; + return m.Color.fromHSL(hsl); + }, + + /** @id MochiKit.Color.Color.prototype.lighterColorWithLevel */ + lighterColorWithLevel: function (level) { + var hsl = this.asHSL(); + hsl.l = Math.min(hsl.l + level, 1); + var m = MochiKit.Color; + return m.Color.fromHSL(hsl); + }, + + /** @id MochiKit.Color.Color.prototype.blendedColor */ + blendedColor: function (other, /* optional */ fraction) { + if (typeof(fraction) == 'undefined' || fraction === null) { + fraction = 0.5; + } + var sf = 1.0 - fraction; + var s = this.rgb; + var d = other.rgb; + var df = fraction; + return MochiKit.Color.Color.fromRGB( + (s.r * sf) + (d.r * df), + (s.g * sf) + (d.g * df), + (s.b * sf) + (d.b * df), + (s.a * sf) + (d.a * df) + ); + }, + + /** @id MochiKit.Color.Color.prototype.compareRGB */ + compareRGB: function (other) { + var a = this.asRGB(); + var b = other.asRGB(); + return MochiKit.Base.compare( + [a.r, a.g, a.b, a.a], + [b.r, b.g, b.b, b.a] + ); + }, + + /** @id MochiKit.Color.Color.prototype.isLight */ + isLight: function () { + return this.asHSL().b > 0.5; + }, + + /** @id MochiKit.Color.Color.prototype.isDark */ + isDark: function () { + return (!this.isLight()); + }, + + /** @id MochiKit.Color.Color.prototype.toHSLString */ + toHSLString: function () { + var c = this.asHSL(); + var ccc = MochiKit.Color.clampColorComponent; + var rval = this._hslString; + if (!rval) { + var mid = ( + ccc(c.h, 360).toFixed(0) + + "," + ccc(c.s, 100).toPrecision(4) + "%" + + "," + ccc(c.l, 100).toPrecision(4) + "%" + ); + var a = c.a; + if (a >= 1) { + a = 1; + rval = "hsl(" + mid + ")"; + } else { + if (a <= 0) { + a = 0; + } + rval = "hsla(" + mid + "," + a + ")"; + } + this._hslString = rval; + } + return rval; + }, + + /** @id MochiKit.Color.Color.prototype.toRGBString */ + toRGBString: function () { + var c = this.rgb; + var ccc = MochiKit.Color.clampColorComponent; + var rval = this._rgbString; + if (!rval) { + var mid = ( + ccc(c.r, 255).toFixed(0) + + "," + ccc(c.g, 255).toFixed(0) + + "," + ccc(c.b, 255).toFixed(0) + ); + if (c.a != 1) { + rval = "rgba(" + mid + "," + c.a + ")"; + } else { + rval = "rgb(" + mid + ")"; + } + this._rgbString = rval; + } + return rval; + }, + + /** @id MochiKit.Color.Color.prototype.asRGB */ + asRGB: function () { + return MochiKit.Base.clone(this.rgb); + }, + + /** @id MochiKit.Color.Color.prototype.toHexString */ + toHexString: function () { + var m = MochiKit.Color; + var c = this.rgb; + var ccc = MochiKit.Color.clampColorComponent; + var rval = this._hexString; + if (!rval) { + rval = ("#" + + m.toColorPart(ccc(c.r, 255)) + + m.toColorPart(ccc(c.g, 255)) + + m.toColorPart(ccc(c.b, 255)) + ); + this._hexString = rval; + } + return rval; + }, + + /** @id MochiKit.Color.Color.prototype.asHSV */ + asHSV: function () { + var hsv = this.hsv; + var c = this.rgb; + if (typeof(hsv) == 'undefined' || hsv === null) { + hsv = MochiKit.Color.rgbToHSV(this.rgb); + this.hsv = hsv; + } + return MochiKit.Base.clone(hsv); + }, + + /** @id MochiKit.Color.Color.prototype.asHSL */ + asHSL: function () { + var hsl = this.hsl; + var c = this.rgb; + if (typeof(hsl) == 'undefined' || hsl === null) { + hsl = MochiKit.Color.rgbToHSL(this.rgb); + this.hsl = hsl; + } + return MochiKit.Base.clone(hsl); + }, + + /** @id MochiKit.Color.Color.prototype.toString */ + toString: function () { + return this.toRGBString(); + }, + + /** @id MochiKit.Color.Color.prototype.repr */ + repr: function () { + var c = this.rgb; + var col = [c.r, c.g, c.b, c.a]; + return this.__class__.NAME + "(" + col.join(", ") + ")"; + } + +}; + +// Constructor methods + +MochiKit.Base.update(MochiKit.Color.Color, { + /** @id MochiKit.Color.Color.fromRGB */ + fromRGB: function (red, green, blue, alpha) { + // designated initializer + var Color = MochiKit.Color.Color; + if (arguments.length == 1) { + var rgb = red; + red = rgb.r; + green = rgb.g; + blue = rgb.b; + if (typeof(rgb.a) == 'undefined') { + alpha = undefined; + } else { + alpha = rgb.a; + } + } + return new Color(red, green, blue, alpha); + }, + + /** @id MochiKit.Color.Color.fromHSL */ + fromHSL: function (hue, saturation, lightness, alpha) { + var m = MochiKit.Color; + return m.Color.fromRGB(m.hslToRGB.apply(m, arguments)); + }, + + /** @id MochiKit.Color.Color.fromHSV */ + fromHSV: function (hue, saturation, value, alpha) { + var m = MochiKit.Color; + return m.Color.fromRGB(m.hsvToRGB.apply(m, arguments)); + }, + + /** @id MochiKit.Color.Color.fromName */ + fromName: function (name) { + var Color = MochiKit.Color.Color; + // Opera 9 seems to "quote" named colors(?!) + if (name.charAt(0) == '"') { + name = name.substr(1, name.length - 2); + } + var htmlColor = Color._namedColors[name.toLowerCase()]; + if (typeof(htmlColor) == 'string') { + return Color.fromHexString(htmlColor); + } else if (name == "transparent") { + return Color.transparentColor(); + } + return null; + }, + + /** @id MochiKit.Color.Color.fromString */ + fromString: function (colorString) { + var self = MochiKit.Color.Color; + var three = colorString.substr(0, 3); + if (three == "rgb") { + return self.fromRGBString(colorString); + } else if (three == "hsl") { + return self.fromHSLString(colorString); + } else if (colorString.charAt(0) == "#") { + return self.fromHexString(colorString); + } + return self.fromName(colorString); + }, + + + /** @id MochiKit.Color.Color.fromHexString */ + fromHexString: function (hexCode) { + if (hexCode.charAt(0) == '#') { + hexCode = hexCode.substring(1); + } + var components = []; + var i, hex; + if (hexCode.length == 3) { + for (i = 0; i < 3; i++) { + hex = hexCode.substr(i, 1); + components.push(parseInt(hex + hex, 16) / 255.0); + } + } else { + for (i = 0; i < 6; i += 2) { + hex = hexCode.substr(i, 2); + components.push(parseInt(hex, 16) / 255.0); + } + } + var Color = MochiKit.Color.Color; + return Color.fromRGB.apply(Color, components); + }, + + + _fromColorString: function (pre, method, scales, colorCode) { + // parses either HSL or RGB + if (colorCode.indexOf(pre) === 0) { + colorCode = colorCode.substring(colorCode.indexOf("(", 3) + 1, colorCode.length - 1); + } + var colorChunks = colorCode.split(/\s*,\s*/); + var colorFloats = []; + for (var i = 0; i < colorChunks.length; i++) { + var c = colorChunks[i]; + var val; + var three = c.substring(c.length - 3); + if (c.charAt(c.length - 1) == '%') { + val = 0.01 * parseFloat(c.substring(0, c.length - 1)); + } else if (three == "deg") { + val = parseFloat(c) / 360.0; + } else if (three == "rad") { + val = parseFloat(c) / (Math.PI * 2); + } else { + val = scales[i] * parseFloat(c); + } + colorFloats.push(val); + } + return this[method].apply(this, colorFloats); + }, + + /** @id MochiKit.Color.Color.fromComputedStyle */ + fromComputedStyle: function (elem, style) { + var d = MochiKit.DOM; + var cls = MochiKit.Color.Color; + for (elem = d.getElement(elem); elem; elem = elem.parentNode) { + var actualColor = MochiKit.Style.getStyle.apply(d, arguments); + if (!actualColor) { + continue; + } + var color = cls.fromString(actualColor); + if (!color) { + break; + } + if (color.asRGB().a > 0) { + return color; + } + } + return null; + }, + + /** @id MochiKit.Color.Color.fromBackground */ + fromBackground: function (elem) { + var cls = MochiKit.Color.Color; + return cls.fromComputedStyle( + elem, "backgroundColor", "background-color") || cls.whiteColor(); + }, + + /** @id MochiKit.Color.Color.fromText */ + fromText: function (elem) { + var cls = MochiKit.Color.Color; + return cls.fromComputedStyle( + elem, "color", "color") || cls.blackColor(); + }, + + /** @id MochiKit.Color.Color.namedColors */ + namedColors: function () { + return MochiKit.Base.clone(MochiKit.Color.Color._namedColors); + } +}); + + +// Module level functions + +MochiKit.Base.update(MochiKit.Color, { + /** @id MochiKit.Color.clampColorComponent */ + clampColorComponent: function (v, scale) { + v *= scale; + if (v < 0) { + return 0; + } else if (v > scale) { + return scale; + } else { + return v; + } + }, + + _hslValue: function (n1, n2, hue) { + if (hue > 6.0) { + hue -= 6.0; + } else if (hue < 0.0) { + hue += 6.0; + } + var val; + if (hue < 1.0) { + val = n1 + (n2 - n1) * hue; + } else if (hue < 3.0) { + val = n2; + } else if (hue < 4.0) { + val = n1 + (n2 - n1) * (4.0 - hue); + } else { + val = n1; + } + return val; + }, + + /** @id MochiKit.Color.hsvToRGB */ + hsvToRGB: function (hue, saturation, value, alpha) { + if (arguments.length == 1) { + var hsv = hue; + hue = hsv.h; + saturation = hsv.s; + value = hsv.v; + alpha = hsv.a; + } + var red; + var green; + var blue; + if (saturation === 0) { + red = value; + green = value; + blue = value; + } else { + var i = Math.floor(hue * 6); + var f = (hue * 6) - i; + var p = value * (1 - saturation); + var q = value * (1 - (saturation * f)); + var t = value * (1 - (saturation * (1 - f))); + switch (i) { + case 1: red = q; green = value; blue = p; break; + case 2: red = p; green = value; blue = t; break; + case 3: red = p; green = q; blue = value; break; + case 4: red = t; green = p; blue = value; break; + case 5: red = value; green = p; blue = q; break; + case 6: // fall through + case 0: red = value; green = t; blue = p; break; + } + } + return { + r: red, + g: green, + b: blue, + a: alpha + }; + }, + + /** @id MochiKit.Color.hslToRGB */ + hslToRGB: function (hue, saturation, lightness, alpha) { + if (arguments.length == 1) { + var hsl = hue; + hue = hsl.h; + saturation = hsl.s; + lightness = hsl.l; + alpha = hsl.a; + } + var red; + var green; + var blue; + if (saturation === 0) { + red = lightness; + green = lightness; + blue = lightness; + } else { + var m2; + if (lightness <= 0.5) { + m2 = lightness * (1.0 + saturation); + } else { + m2 = lightness + saturation - (lightness * saturation); + } + var m1 = (2.0 * lightness) - m2; + var f = MochiKit.Color._hslValue; + var h6 = hue * 6.0; + red = f(m1, m2, h6 + 2); + green = f(m1, m2, h6); + blue = f(m1, m2, h6 - 2); + } + return { + r: red, + g: green, + b: blue, + a: alpha + }; + }, + + /** @id MochiKit.Color.rgbToHSV */ + rgbToHSV: function (red, green, blue, alpha) { + if (arguments.length == 1) { + var rgb = red; + red = rgb.r; + green = rgb.g; + blue = rgb.b; + alpha = rgb.a; + } + var max = Math.max(Math.max(red, green), blue); + var min = Math.min(Math.min(red, green), blue); + var hue; + var saturation; + var value = max; + if (min == max) { + hue = 0; + saturation = 0; + } else { + var delta = (max - min); + saturation = delta / max; + + if (red == max) { + hue = (green - blue) / delta; + } else if (green == max) { + hue = 2 + ((blue - red) / delta); + } else { + hue = 4 + ((red - green) / delta); + } + hue /= 6; + if (hue < 0) { + hue += 1; + } + if (hue > 1) { + hue -= 1; + } + } + return { + h: hue, + s: saturation, + v: value, + a: alpha + }; + }, + + /** @id MochiKit.Color.rgbToHSL */ + rgbToHSL: function (red, green, blue, alpha) { + if (arguments.length == 1) { + var rgb = red; + red = rgb.r; + green = rgb.g; + blue = rgb.b; + alpha = rgb.a; + } + var max = Math.max(red, Math.max(green, blue)); + var min = Math.min(red, Math.min(green, blue)); + var hue; + var saturation; + var lightness = (max + min) / 2.0; + var delta = max - min; + if (delta === 0) { + hue = 0; + saturation = 0; + } else { + if (lightness <= 0.5) { + saturation = delta / (max + min); + } else { + saturation = delta / (2 - max - min); + } + if (red == max) { + hue = (green - blue) / delta; + } else if (green == max) { + hue = 2 + ((blue - red) / delta); + } else { + hue = 4 + ((red - green) / delta); + } + hue /= 6; + if (hue < 0) { + hue += 1; + } + if (hue > 1) { + hue -= 1; + } + + } + return { + h: hue, + s: saturation, + l: lightness, + a: alpha + }; + }, + + /** @id MochiKit.Color.toColorPart */ + toColorPart: function (num) { + num = Math.round(num); + var digits = num.toString(16); + if (num < 16) { + return '0' + digits; + } + return digits; + }, + + __new__: function () { + var m = MochiKit.Base; + /** @id MochiKit.Color.fromRGBString */ + this.Color.fromRGBString = m.bind( + this.Color._fromColorString, this.Color, "rgb", "fromRGB", + [1.0/255.0, 1.0/255.0, 1.0/255.0, 1] + ); + /** @id MochiKit.Color.fromHSLString */ + this.Color.fromHSLString = m.bind( + this.Color._fromColorString, this.Color, "hsl", "fromHSL", + [1.0/360.0, 0.01, 0.01, 1] + ); + + var third = 1.0 / 3.0; + /** @id MochiKit.Color.colors */ + var colors = { + // NSColor colors plus transparent + /** @id MochiKit.Color.blackColor */ + black: [0, 0, 0], + /** @id MochiKit.Color.blueColor */ + blue: [0, 0, 1], + /** @id MochiKit.Color.brownColor */ + brown: [0.6, 0.4, 0.2], + /** @id MochiKit.Color.cyanColor */ + cyan: [0, 1, 1], + /** @id MochiKit.Color.darkGrayColor */ + darkGray: [third, third, third], + /** @id MochiKit.Color.grayColor */ + gray: [0.5, 0.5, 0.5], + /** @id MochiKit.Color.greenColor */ + green: [0, 1, 0], + /** @id MochiKit.Color.lightGrayColor */ + lightGray: [2 * third, 2 * third, 2 * third], + /** @id MochiKit.Color.magentaColor */ + magenta: [1, 0, 1], + /** @id MochiKit.Color.orangeColor */ + orange: [1, 0.5, 0], + /** @id MochiKit.Color.purpleColor */ + purple: [0.5, 0, 0.5], + /** @id MochiKit.Color.redColor */ + red: [1, 0, 0], + /** @id MochiKit.Color.transparentColor */ + transparent: [0, 0, 0, 0], + /** @id MochiKit.Color.whiteColor */ + white: [1, 1, 1], + /** @id MochiKit.Color.yellowColor */ + yellow: [1, 1, 0] + }; + + var makeColor = function (name, r, g, b, a) { + var rval = this.fromRGB(r, g, b, a); + this[name] = function () { return rval; }; + return rval; + }; + + for (var k in colors) { + var name = k + "Color"; + var bindArgs = m.concat( + [makeColor, this.Color, name], + colors[k] + ); + this.Color[name] = m.bind.apply(null, bindArgs); + } + + var isColor = function () { + for (var i = 0; i < arguments.length; i++) { + if (!(arguments[i] instanceof MochiKit.Color.Color)) { + return false; + } + } + return true; + }; + + var compareColor = function (a, b) { + return a.compareRGB(b); + }; + + m.nameFunctions(this); + + m.registerComparator(this.Color.NAME, isColor, compareColor); + + this.EXPORT_TAGS = { + ":common": this.EXPORT, + ":all": m.concat(this.EXPORT, this.EXPORT_OK) + }; + + } +}); + +MochiKit.Color.EXPORT = [ + "Color" +]; + +MochiKit.Color.EXPORT_OK = [ + "clampColorComponent", + "rgbToHSL", + "hslToRGB", + "rgbToHSV", + "hsvToRGB", + "toColorPart" +]; + +MochiKit.Color.__new__(); + +MochiKit.Base._exportSymbols(this, MochiKit.Color); + +// Full table of css3 X11 colors + +MochiKit.Color.Color._namedColors = { + aliceblue: "#f0f8ff", + antiquewhite: "#faebd7", + aqua: "#00ffff", + aquamarine: "#7fffd4", + azure: "#f0ffff", + beige: "#f5f5dc", + bisque: "#ffe4c4", + black: "#000000", + blanchedalmond: "#ffebcd", + blue: "#0000ff", + blueviolet: "#8a2be2", + brown: "#a52a2a", + burlywood: "#deb887", + cadetblue: "#5f9ea0", + chartreuse: "#7fff00", + chocolate: "#d2691e", + coral: "#ff7f50", + cornflowerblue: "#6495ed", + cornsilk: "#fff8dc", + crimson: "#dc143c", + cyan: "#00ffff", + darkblue: "#00008b", + darkcyan: "#008b8b", + darkgoldenrod: "#b8860b", + darkgray: "#a9a9a9", + darkgreen: "#006400", + darkgrey: "#a9a9a9", + darkkhaki: "#bdb76b", + darkmagenta: "#8b008b", + darkolivegreen: "#556b2f", + darkorange: "#ff8c00", + darkorchid: "#9932cc", + darkred: "#8b0000", + darksalmon: "#e9967a", + darkseagreen: "#8fbc8f", + darkslateblue: "#483d8b", + darkslategray: "#2f4f4f", + darkslategrey: "#2f4f4f", + darkturquoise: "#00ced1", + darkviolet: "#9400d3", + deeppink: "#ff1493", + deepskyblue: "#00bfff", + dimgray: "#696969", + dimgrey: "#696969", + dodgerblue: "#1e90ff", + firebrick: "#b22222", + floralwhite: "#fffaf0", + forestgreen: "#228b22", + fuchsia: "#ff00ff", + gainsboro: "#dcdcdc", + ghostwhite: "#f8f8ff", + gold: "#ffd700", + goldenrod: "#daa520", + gray: "#808080", + green: "#008000", + greenyellow: "#adff2f", + grey: "#808080", + honeydew: "#f0fff0", + hotpink: "#ff69b4", + indianred: "#cd5c5c", + indigo: "#4b0082", + ivory: "#fffff0", + khaki: "#f0e68c", + lavender: "#e6e6fa", + lavenderblush: "#fff0f5", + lawngreen: "#7cfc00", + lemonchiffon: "#fffacd", + lightblue: "#add8e6", + lightcoral: "#f08080", + lightcyan: "#e0ffff", + lightgoldenrodyellow: "#fafad2", + lightgray: "#d3d3d3", + lightgreen: "#90ee90", + lightgrey: "#d3d3d3", + lightpink: "#ffb6c1", + lightsalmon: "#ffa07a", + lightseagreen: "#20b2aa", + lightskyblue: "#87cefa", + lightslategray: "#778899", + lightslategrey: "#778899", + lightsteelblue: "#b0c4de", + lightyellow: "#ffffe0", + lime: "#00ff00", + limegreen: "#32cd32", + linen: "#faf0e6", + magenta: "#ff00ff", + maroon: "#800000", + mediumaquamarine: "#66cdaa", + mediumblue: "#0000cd", + mediumorchid: "#ba55d3", + mediumpurple: "#9370db", + mediumseagreen: "#3cb371", + mediumslateblue: "#7b68ee", + mediumspringgreen: "#00fa9a", + mediumturquoise: "#48d1cc", + mediumvioletred: "#c71585", + midnightblue: "#191970", + mintcream: "#f5fffa", + mistyrose: "#ffe4e1", + moccasin: "#ffe4b5", + navajowhite: "#ffdead", + navy: "#000080", + oldlace: "#fdf5e6", + olive: "#808000", + olivedrab: "#6b8e23", + orange: "#ffa500", + orangered: "#ff4500", + orchid: "#da70d6", + palegoldenrod: "#eee8aa", + palegreen: "#98fb98", + paleturquoise: "#afeeee", + palevioletred: "#db7093", + papayawhip: "#ffefd5", + peachpuff: "#ffdab9", + peru: "#cd853f", + pink: "#ffc0cb", + plum: "#dda0dd", + powderblue: "#b0e0e6", + purple: "#800080", + red: "#ff0000", + rosybrown: "#bc8f8f", + royalblue: "#4169e1", + saddlebrown: "#8b4513", + salmon: "#fa8072", + sandybrown: "#f4a460", + seagreen: "#2e8b57", + seashell: "#fff5ee", + sienna: "#a0522d", + silver: "#c0c0c0", + skyblue: "#87ceeb", + slateblue: "#6a5acd", + slategray: "#708090", + slategrey: "#708090", + snow: "#fffafa", + springgreen: "#00ff7f", + steelblue: "#4682b4", + tan: "#d2b48c", + teal: "#008080", + thistle: "#d8bfd8", + tomato: "#ff6347", + turquoise: "#40e0d0", + violet: "#ee82ee", + wheat: "#f5deb3", + white: "#ffffff", + whitesmoke: "#f5f5f5", + yellow: "#ffff00", + yellowgreen: "#9acd32" +}; diff --git a/static/MochiKit/DOM.js b/static/MochiKit/DOM.js new file mode 100644 index 0000000..82cbaf2 --- /dev/null +++ b/static/MochiKit/DOM.js @@ -0,0 +1,1256 @@ +/*** + +MochiKit.DOM 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito. All rights Reserved. + +***/ + +MochiKit.Base._deps('DOM', ['Base']); + +MochiKit.DOM.NAME = "MochiKit.DOM"; +MochiKit.DOM.VERSION = "1.4.2"; +MochiKit.DOM.__repr__ = function () { + return "[" + this.NAME + " " + this.VERSION + "]"; +}; +MochiKit.DOM.toString = function () { + return this.__repr__(); +}; + +MochiKit.DOM.EXPORT = [ + "removeEmptyTextNodes", + "formContents", + "currentWindow", + "currentDocument", + "withWindow", + "withDocument", + "registerDOMConverter", + "coerceToDOM", + "createDOM", + "createDOMFunc", + "isChildNode", + "getNodeAttribute", + "removeNodeAttribute", + "setNodeAttribute", + "updateNodeAttributes", + "appendChildNodes", + "insertSiblingNodesAfter", + "insertSiblingNodesBefore", + "replaceChildNodes", + "removeElement", + "swapDOM", + "BUTTON", + "TT", + "PRE", + "H1", + "H2", + "H3", + "H4", + "H5", + "H6", + "BR", + "CANVAS", + "HR", + "LABEL", + "TEXTAREA", + "FORM", + "STRONG", + "SELECT", + "OPTION", + "OPTGROUP", + "LEGEND", + "FIELDSET", + "P", + "UL", + "OL", + "LI", + "DL", + "DT", + "DD", + "TD", + "TR", + "THEAD", + "TBODY", + "TFOOT", + "TABLE", + "TH", + "INPUT", + "SPAN", + "A", + "DIV", + "IMG", + "getElement", + "$", + "getElementsByTagAndClassName", + "addToCallStack", + "addLoadEvent", + "focusOnLoad", + "setElementClass", + "toggleElementClass", + "addElementClass", + "removeElementClass", + "swapElementClass", + "hasElementClass", + "computedStyle", // deprecated in 1.4 + "escapeHTML", + "toHTML", + "emitHTML", + "scrapeText", + "getFirstParentByTagAndClassName", + "getFirstElementByTagAndClassName" +]; + +MochiKit.DOM.EXPORT_OK = [ + "domConverters" +]; + +MochiKit.DOM.DEPRECATED = [ + /** @id MochiKit.DOM.computedStyle */ + ['computedStyle', 'MochiKit.Style.getStyle', '1.4'], + /** @id MochiKit.DOM.elementDimensions */ + ['elementDimensions', 'MochiKit.Style.getElementDimensions', '1.4'], + /** @id MochiKit.DOM.elementPosition */ + ['elementPosition', 'MochiKit.Style.getElementPosition', '1.4'], + /** @id MochiKit.DOM.getViewportDimensions */ + ['getViewportDimensions', 'MochiKit.Style.getViewportDimensions', '1.4'], + /** @id MochiKit.DOM.hideElement */ + ['hideElement', 'MochiKit.Style.hideElement', '1.4'], + /** @id MochiKit.DOM.makeClipping */ + ['makeClipping', 'MochiKit.Style.makeClipping', '1.4.1'], + /** @id MochiKit.DOM.makePositioned */ + ['makePositioned', 'MochiKit.Style.makePositioned', '1.4.1'], + /** @id MochiKit.DOM.setElementDimensions */ + ['setElementDimensions', 'MochiKit.Style.setElementDimensions', '1.4'], + /** @id MochiKit.DOM.setElementPosition */ + ['setElementPosition', 'MochiKit.Style.setElementPosition', '1.4'], + /** @id MochiKit.DOM.setDisplayForElement */ + ['setDisplayForElement', 'MochiKit.Style.setDisplayForElement', '1.4'], + /** @id MochiKit.DOM.setOpacity */ + ['setOpacity', 'MochiKit.Style.setOpacity', '1.4'], + /** @id MochiKit.DOM.showElement */ + ['showElement', 'MochiKit.Style.showElement', '1.4'], + /** @id MochiKit.DOM.undoClipping */ + ['undoClipping', 'MochiKit.Style.undoClipping', '1.4.1'], + /** @id MochiKit.DOM.undoPositioned */ + ['undoPositioned', 'MochiKit.Style.undoPositioned', '1.4.1'], + /** @id MochiKit.DOM.Coordinates */ + ['Coordinates', 'MochiKit.Style.Coordinates', '1.4'], // FIXME: broken + /** @id MochiKit.DOM.Dimensions */ + ['Dimensions', 'MochiKit.Style.Dimensions', '1.4'] // FIXME: broken +]; + +MochiKit.Base.update(MochiKit.DOM, { + + /** @id MochiKit.DOM.currentWindow */ + currentWindow: function () { + return MochiKit.DOM._window; + }, + + /** @id MochiKit.DOM.currentDocument */ + currentDocument: function () { + return MochiKit.DOM._document; + }, + + /** @id MochiKit.DOM.withWindow */ + withWindow: function (win, func) { + var self = MochiKit.DOM; + var oldDoc = self._document; + var oldWin = self._window; + var rval; + try { + self._window = win; + self._document = win.document; + rval = func(); + } catch (e) { + self._window = oldWin; + self._document = oldDoc; + throw e; + } + self._window = oldWin; + self._document = oldDoc; + return rval; + }, + + /** @id MochiKit.DOM.formContents */ + formContents: function (elem/* = document.body */) { + var names = []; + var values = []; + var m = MochiKit.Base; + var self = MochiKit.DOM; + if (typeof(elem) == "undefined" || elem === null) { + elem = self._document.body; + } else { + elem = self.getElement(elem); + } + m.nodeWalk(elem, function (elem) { + var name = elem.name; + if (m.isNotEmpty(name)) { + var tagName = elem.tagName.toUpperCase(); + if (tagName === "INPUT" + && (elem.type == "radio" || elem.type == "checkbox") + && !elem.checked + ) { + return null; + } + if (tagName === "SELECT") { + if (elem.type == "select-one") { + if (elem.selectedIndex >= 0) { + var opt = elem.options[elem.selectedIndex]; + var v = opt.value; + if (!v) { + var h = opt.outerHTML; + // internet explorer sure does suck. + if (h && !h.match(/^[^>]+\svalue\s*=/i)) { + v = opt.text; + } + } + names.push(name); + values.push(v); + return null; + } + // no form elements? + names.push(name); + values.push(""); + return null; + } else { + var opts = elem.options; + if (!opts.length) { + names.push(name); + values.push(""); + return null; + } + for (var i = 0; i < opts.length; i++) { + var opt = opts[i]; + if (!opt.selected) { + continue; + } + var v = opt.value; + if (!v) { + var h = opt.outerHTML; + // internet explorer sure does suck. + if (h && !h.match(/^[^>]+\svalue\s*=/i)) { + v = opt.text; + } + } + names.push(name); + values.push(v); + } + return null; + } + } + if (tagName === "FORM" || tagName === "P" || tagName === "SPAN" + || tagName === "DIV" + ) { + return elem.childNodes; + } + names.push(name); + values.push(elem.value || ''); + return null; + } + return elem.childNodes; + }); + return [names, values]; + }, + + /** @id MochiKit.DOM.withDocument */ + withDocument: function (doc, func) { + var self = MochiKit.DOM; + var oldDoc = self._document; + var rval; + try { + self._document = doc; + rval = func(); + } catch (e) { + self._document = oldDoc; + throw e; + } + self._document = oldDoc; + return rval; + }, + + /** @id MochiKit.DOM.registerDOMConverter */ + registerDOMConverter: function (name, check, wrap, /* optional */override) { + MochiKit.DOM.domConverters.register(name, check, wrap, override); + }, + + /** @id MochiKit.DOM.coerceToDOM */ + coerceToDOM: function (node, ctx) { + var m = MochiKit.Base; + var im = MochiKit.Iter; + var self = MochiKit.DOM; + if (im) { + var iter = im.iter; + var repeat = im.repeat; + } + var map = m.map; + var domConverters = self.domConverters; + var coerceToDOM = arguments.callee; + var NotFound = m.NotFound; + while (true) { + if (typeof(node) == 'undefined' || node === null) { + return null; + } + // this is a safari childNodes object, avoiding crashes w/ attr + // lookup + if (typeof(node) == "function" && + typeof(node.length) == "number" && + !(node instanceof Function)) { + node = im ? im.list(node) : m.extend(null, node); + } + if (typeof(node.nodeType) != 'undefined' && node.nodeType > 0) { + return node; + } + if (typeof(node) == 'number' || typeof(node) == 'boolean') { + node = node.toString(); + // FALL THROUGH + } + if (typeof(node) == 'string') { + return self._document.createTextNode(node); + } + if (typeof(node.__dom__) == 'function') { + node = node.__dom__(ctx); + continue; + } + if (typeof(node.dom) == 'function') { + node = node.dom(ctx); + continue; + } + if (typeof(node) == 'function') { + node = node.apply(ctx, [ctx]); + continue; + } + + if (im) { + // iterable + var iterNodes = null; + try { + iterNodes = iter(node); + } catch (e) { + // pass + } + if (iterNodes) { + return map(coerceToDOM, iterNodes, repeat(ctx)); + } + } else if (m.isArrayLike(node)) { + var func = function (n) { return coerceToDOM(n, ctx); }; + return map(func, node); + } + + // adapter + try { + node = domConverters.match(node, ctx); + continue; + } catch (e) { + if (e != NotFound) { + throw e; + } + } + + // fallback + return self._document.createTextNode(node.toString()); + } + // mozilla warnings aren't too bright + return undefined; + }, + + /** @id MochiKit.DOM.isChildNode */ + isChildNode: function (node, maybeparent) { + var self = MochiKit.DOM; + if (typeof(node) == "string") { + node = self.getElement(node); + } + if (typeof(maybeparent) == "string") { + maybeparent = self.getElement(maybeparent); + } + if (typeof(node) == 'undefined' || node === null) { + return false; + } + while (node != null && node !== self._document) { + if (node === maybeparent) { + return true; + } + node = node.parentNode; + } + return false; + }, + + /** @id MochiKit.DOM.setNodeAttribute */ + setNodeAttribute: function (node, attr, value) { + var o = {}; + o[attr] = value; + try { + return MochiKit.DOM.updateNodeAttributes(node, o); + } catch (e) { + // pass + } + return null; + }, + + /** @id MochiKit.DOM.getNodeAttribute */ + getNodeAttribute: function (node, attr) { + var self = MochiKit.DOM; + var rename = self.attributeArray.renames[attr]; + var ignoreValue = self.attributeArray.ignoreAttr[attr]; + node = self.getElement(node); + try { + if (rename) { + return node[rename]; + } + var value = node.getAttribute(attr); + if (value != ignoreValue) { + return value; + } + } catch (e) { + // pass + } + return null; + }, + + /** @id MochiKit.DOM.removeNodeAttribute */ + removeNodeAttribute: function (node, attr) { + var self = MochiKit.DOM; + var rename = self.attributeArray.renames[attr]; + node = self.getElement(node); + try { + if (rename) { + return node[rename]; + } + return node.removeAttribute(attr); + } catch (e) { + // pass + } + return null; + }, + + /** @id MochiKit.DOM.updateNodeAttributes */ + updateNodeAttributes: function (node, attrs) { + var elem = node; + var self = MochiKit.DOM; + if (typeof(node) == 'string') { + elem = self.getElement(node); + } + if (attrs) { + var updatetree = MochiKit.Base.updatetree; + if (self.attributeArray.compliant) { + // not IE, good. + for (var k in attrs) { + var v = attrs[k]; + if (typeof(v) == 'object' && typeof(elem[k]) == 'object') { + if (k == "style" && MochiKit.Style) { + MochiKit.Style.setStyle(elem, v); + } else { + updatetree(elem[k], v); + } + } else if (k.substring(0, 2) == "on") { + if (typeof(v) == "string") { + v = new Function(v); + } + elem[k] = v; + } else { + elem.setAttribute(k, v); + } + if (typeof(elem[k]) == "string" && elem[k] != v) { + // Also set property for weird attributes (see #302) + elem[k] = v; + } + } + } else { + // IE is insane in the membrane + var renames = self.attributeArray.renames; + for (var k in attrs) { + v = attrs[k]; + var renamed = renames[k]; + if (k == "style" && typeof(v) == "string") { + elem.style.cssText = v; + } else if (typeof(renamed) == "string") { + elem[renamed] = v; + } else if (typeof(elem[k]) == 'object' + && typeof(v) == 'object') { + if (k == "style" && MochiKit.Style) { + MochiKit.Style.setStyle(elem, v); + } else { + updatetree(elem[k], v); + } + } else if (k.substring(0, 2) == "on") { + if (typeof(v) == "string") { + v = new Function(v); + } + elem[k] = v; + } else { + elem.setAttribute(k, v); + } + if (typeof(elem[k]) == "string" && elem[k] != v) { + // Also set property for weird attributes (see #302) + elem[k] = v; + } + } + } + } + return elem; + }, + + /** @id MochiKit.DOM.appendChildNodes */ + appendChildNodes: function (node/*, nodes...*/) { + var elem = node; + var self = MochiKit.DOM; + if (typeof(node) == 'string') { + elem = self.getElement(node); + } + var nodeStack = [ + self.coerceToDOM( + MochiKit.Base.extend(null, arguments, 1), + elem + ) + ]; + var concat = MochiKit.Base.concat; + while (nodeStack.length) { + var n = nodeStack.shift(); + if (typeof(n) == 'undefined' || n === null) { + // pass + } else if (typeof(n.nodeType) == 'number') { + elem.appendChild(n); + } else { + nodeStack = concat(n, nodeStack); + } + } + return elem; + }, + + + /** @id MochiKit.DOM.insertSiblingNodesBefore */ + insertSiblingNodesBefore: function (node/*, nodes...*/) { + var elem = node; + var self = MochiKit.DOM; + if (typeof(node) == 'string') { + elem = self.getElement(node); + } + var nodeStack = [ + self.coerceToDOM( + MochiKit.Base.extend(null, arguments, 1), + elem + ) + ]; + var parentnode = elem.parentNode; + var concat = MochiKit.Base.concat; + while (nodeStack.length) { + var n = nodeStack.shift(); + if (typeof(n) == 'undefined' || n === null) { + // pass + } else if (typeof(n.nodeType) == 'number') { + parentnode.insertBefore(n, elem); + } else { + nodeStack = concat(n, nodeStack); + } + } + return parentnode; + }, + + /** @id MochiKit.DOM.insertSiblingNodesAfter */ + insertSiblingNodesAfter: function (node/*, nodes...*/) { + var elem = node; + var self = MochiKit.DOM; + + if (typeof(node) == 'string') { + elem = self.getElement(node); + } + var nodeStack = [ + self.coerceToDOM( + MochiKit.Base.extend(null, arguments, 1), + elem + ) + ]; + + if (elem.nextSibling) { + return self.insertSiblingNodesBefore(elem.nextSibling, nodeStack); + } + else { + return self.appendChildNodes(elem.parentNode, nodeStack); + } + }, + + /** @id MochiKit.DOM.replaceChildNodes */ + replaceChildNodes: function (node/*, nodes...*/) { + var elem = node; + var self = MochiKit.DOM; + if (typeof(node) == 'string') { + elem = self.getElement(node); + arguments[0] = elem; + } + var child; + while ((child = elem.firstChild)) { + elem.removeChild(child); + } + if (arguments.length < 2) { + return elem; + } else { + return self.appendChildNodes.apply(this, arguments); + } + }, + + /** @id MochiKit.DOM.createDOM */ + createDOM: function (name, attrs/*, nodes... */) { + var elem; + var self = MochiKit.DOM; + var m = MochiKit.Base; + if (typeof(attrs) == "string" || typeof(attrs) == "number") { + var args = m.extend([name, null], arguments, 1); + return arguments.callee.apply(this, args); + } + if (typeof(name) == 'string') { + // Internet Explorer is dumb + var xhtml = self._xhtml; + if (attrs && !self.attributeArray.compliant) { + // http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/name_2.asp + var contents = ""; + if ('name' in attrs) { + contents += ' name="' + self.escapeHTML(attrs.name) + '"'; + } + if (name == 'input' && 'type' in attrs) { + contents += ' type="' + self.escapeHTML(attrs.type) + '"'; + } + if (contents) { + name = "<" + name + contents + ">"; + xhtml = false; + } + } + var d = self._document; + if (xhtml && d === document) { + elem = d.createElementNS("http://www.w3.org/1999/xhtml", name); + } else { + elem = d.createElement(name); + } + } else { + elem = name; + } + if (attrs) { + self.updateNodeAttributes(elem, attrs); + } + if (arguments.length <= 2) { + return elem; + } else { + var args = m.extend([elem], arguments, 2); + return self.appendChildNodes.apply(this, args); + } + }, + + /** @id MochiKit.DOM.createDOMFunc */ + createDOMFunc: function (/* tag, attrs, *nodes */) { + var m = MochiKit.Base; + return m.partial.apply( + this, + m.extend([MochiKit.DOM.createDOM], arguments) + ); + }, + + /** @id MochiKit.DOM.removeElement */ + removeElement: function (elem) { + var self = MochiKit.DOM; + var e = self.coerceToDOM(self.getElement(elem)); + e.parentNode.removeChild(e); + return e; + }, + + /** @id MochiKit.DOM.swapDOM */ + swapDOM: function (dest, src) { + var self = MochiKit.DOM; + dest = self.getElement(dest); + var parent = dest.parentNode; + if (src) { + src = self.coerceToDOM(self.getElement(src), parent); + parent.replaceChild(src, dest); + } else { + parent.removeChild(dest); + } + return src; + }, + + /** @id MochiKit.DOM.getElement */ + getElement: function (id) { + var self = MochiKit.DOM; + if (arguments.length == 1) { + return ((typeof(id) == "string") ? + self._document.getElementById(id) : id); + } else { + return MochiKit.Base.map(self.getElement, arguments); + } + }, + + /** @id MochiKit.DOM.getElementsByTagAndClassName */ + getElementsByTagAndClassName: function (tagName, className, + /* optional */parent) { + var self = MochiKit.DOM; + if (typeof(tagName) == 'undefined' || tagName === null) { + tagName = '*'; + } + if (typeof(parent) == 'undefined' || parent === null) { + parent = self._document; + } + parent = self.getElement(parent); + if (parent == null) { + return []; + } + var children = (parent.getElementsByTagName(tagName) + || self._document.all); + if (typeof(className) == 'undefined' || className === null) { + return MochiKit.Base.extend(null, children); + } + + var elements = []; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + var cls = child.className; + if (typeof(cls) != "string") { + cls = child.getAttribute("class"); + } + if (typeof(cls) == "string") { + var classNames = cls.split(' '); + for (var j = 0; j < classNames.length; j++) { + if (classNames[j] == className) { + elements.push(child); + break; + } + } + } + } + + return elements; + }, + + _newCallStack: function (path, once) { + var rval = function () { + var callStack = arguments.callee.callStack; + for (var i = 0; i < callStack.length; i++) { + if (callStack[i].apply(this, arguments) === false) { + break; + } + } + if (once) { + try { + this[path] = null; + } catch (e) { + // pass + } + } + }; + rval.callStack = []; + return rval; + }, + + /** @id MochiKit.DOM.addToCallStack */ + addToCallStack: function (target, path, func, once) { + var self = MochiKit.DOM; + var existing = target[path]; + var regfunc = existing; + if (!(typeof(existing) == 'function' + && typeof(existing.callStack) == "object" + && existing.callStack !== null)) { + regfunc = self._newCallStack(path, once); + if (typeof(existing) == 'function') { + regfunc.callStack.push(existing); + } + target[path] = regfunc; + } + regfunc.callStack.push(func); + }, + + /** @id MochiKit.DOM.addLoadEvent */ + addLoadEvent: function (func) { + var self = MochiKit.DOM; + self.addToCallStack(self._window, "onload", func, true); + + }, + + /** @id MochiKit.DOM.focusOnLoad */ + focusOnLoad: function (element) { + var self = MochiKit.DOM; + self.addLoadEvent(function () { + element = self.getElement(element); + if (element) { + element.focus(); + } + }); + }, + + /** @id MochiKit.DOM.setElementClass */ + setElementClass: function (element, className) { + var self = MochiKit.DOM; + var obj = self.getElement(element); + if (self.attributeArray.compliant) { + obj.setAttribute("class", className); + } else { + obj.setAttribute("className", className); + } + }, + + /** @id MochiKit.DOM.toggleElementClass */ + toggleElementClass: function (className/*, element... */) { + var self = MochiKit.DOM; + for (var i = 1; i < arguments.length; i++) { + var obj = self.getElement(arguments[i]); + if (!self.addElementClass(obj, className)) { + self.removeElementClass(obj, className); + } + } + }, + + /** @id MochiKit.DOM.addElementClass */ + addElementClass: function (element, className) { + var self = MochiKit.DOM; + var obj = self.getElement(element); + var cls = obj.className; + if (typeof(cls) != "string") { + cls = obj.getAttribute("class"); + } + // trivial case, no className yet + if (typeof(cls) != "string" || cls.length === 0) { + self.setElementClass(obj, className); + return true; + } + // the other trivial case, already set as the only class + if (cls == className) { + return false; + } + var classes = cls.split(" "); + for (var i = 0; i < classes.length; i++) { + // already present + if (classes[i] == className) { + return false; + } + } + // append class + self.setElementClass(obj, cls + " " + className); + return true; + }, + + /** @id MochiKit.DOM.removeElementClass */ + removeElementClass: function (element, className) { + var self = MochiKit.DOM; + var obj = self.getElement(element); + var cls = obj.className; + if (typeof(cls) != "string") { + cls = obj.getAttribute("class"); + } + // trivial case, no className yet + if (typeof(cls) != "string" || cls.length === 0) { + return false; + } + // other trivial case, set only to className + if (cls == className) { + self.setElementClass(obj, ""); + return true; + } + var classes = cls.split(" "); + for (var i = 0; i < classes.length; i++) { + // already present + if (classes[i] == className) { + // only check sane case where the class is used once + classes.splice(i, 1); + self.setElementClass(obj, classes.join(" ")); + return true; + } + } + // not found + return false; + }, + + /** @id MochiKit.DOM.swapElementClass */ + swapElementClass: function (element, fromClass, toClass) { + var obj = MochiKit.DOM.getElement(element); + var res = MochiKit.DOM.removeElementClass(obj, fromClass); + if (res) { + MochiKit.DOM.addElementClass(obj, toClass); + } + return res; + }, + + /** @id MochiKit.DOM.hasElementClass */ + hasElementClass: function (element, className/*...*/) { + var obj = MochiKit.DOM.getElement(element); + if (obj == null) { + return false; + } + var cls = obj.className; + if (typeof(cls) != "string") { + cls = obj.getAttribute("class"); + } + if (typeof(cls) != "string") { + return false; + } + var classes = cls.split(" "); + for (var i = 1; i < arguments.length; i++) { + var good = false; + for (var j = 0; j < classes.length; j++) { + if (classes[j] == arguments[i]) { + good = true; + break; + } + } + if (!good) { + return false; + } + } + return true; + }, + + /** @id MochiKit.DOM.escapeHTML */ + escapeHTML: function (s) { + return s.replace(/&/g, "&" + ).replace(/"/g, """ + ).replace(//g, ">"); + }, + + /** @id MochiKit.DOM.toHTML */ + toHTML: function (dom) { + return MochiKit.DOM.emitHTML(dom).join(""); + }, + + /** @id MochiKit.DOM.emitHTML */ + emitHTML: function (dom, /* optional */lst) { + if (typeof(lst) == 'undefined' || lst === null) { + lst = []; + } + // queue is the call stack, we're doing this non-recursively + var queue = [dom]; + var self = MochiKit.DOM; + var escapeHTML = self.escapeHTML; + var attributeArray = self.attributeArray; + while (queue.length) { + dom = queue.pop(); + if (typeof(dom) == 'string') { + lst.push(dom); + } else if (dom.nodeType == 1) { + // we're not using higher order stuff here + // because safari has heisenbugs.. argh. + // + // I think it might have something to do with + // garbage collection and function calls. + lst.push('<' + dom.tagName.toLowerCase()); + var attributes = []; + var domAttr = attributeArray(dom); + for (var i = 0; i < domAttr.length; i++) { + var a = domAttr[i]; + attributes.push([ + " ", + a.name, + '="', + escapeHTML(a.value), + '"' + ]); + } + attributes.sort(); + for (i = 0; i < attributes.length; i++) { + var attrs = attributes[i]; + for (var j = 0; j < attrs.length; j++) { + lst.push(attrs[j]); + } + } + if (dom.hasChildNodes()) { + lst.push(">"); + // queue is the FILO call stack, so we put the close tag + // on first + queue.push(""); + var cnodes = dom.childNodes; + for (i = cnodes.length - 1; i >= 0; i--) { + queue.push(cnodes[i]); + } + } else { + lst.push('/>'); + } + } else if (dom.nodeType == 3) { + lst.push(escapeHTML(dom.nodeValue)); + } + } + return lst; + }, + + /** @id MochiKit.DOM.scrapeText */ + scrapeText: function (node, /* optional */asArray) { + var rval = []; + (function (node) { + var cn = node.childNodes; + if (cn) { + for (var i = 0; i < cn.length; i++) { + arguments.callee.call(this, cn[i]); + } + } + var nodeValue = node.nodeValue; + if (typeof(nodeValue) == 'string') { + rval.push(nodeValue); + } + })(MochiKit.DOM.getElement(node)); + if (asArray) { + return rval; + } else { + return rval.join(""); + } + }, + + /** @id MochiKit.DOM.removeEmptyTextNodes */ + removeEmptyTextNodes: function (element) { + element = MochiKit.DOM.getElement(element); + for (var i = 0; i < element.childNodes.length; i++) { + var node = element.childNodes[i]; + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) { + node.parentNode.removeChild(node); + } + } + }, + + /** @id MochiKit.DOM.getFirstElementByTagAndClassName */ + getFirstElementByTagAndClassName: function (tagName, className, + /* optional */parent) { + var self = MochiKit.DOM; + if (typeof(tagName) == 'undefined' || tagName === null) { + tagName = '*'; + } + if (typeof(parent) == 'undefined' || parent === null) { + parent = self._document; + } + parent = self.getElement(parent); + if (parent == null) { + return null; + } + var children = (parent.getElementsByTagName(tagName) + || self._document.all); + if (children.length <= 0) { + return null; + } else if (typeof(className) == 'undefined' || className === null) { + return children[0]; + } + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + var cls = child.className; + if (typeof(cls) != "string") { + cls = child.getAttribute("class"); + } + if (typeof(cls) == "string") { + var classNames = cls.split(' '); + for (var j = 0; j < classNames.length; j++) { + if (classNames[j] == className) { + return child; + } + } + } + } + return null; + }, + + /** @id MochiKit.DOM.getFirstParentByTagAndClassName */ + getFirstParentByTagAndClassName: function (elem, tagName, className) { + var self = MochiKit.DOM; + elem = self.getElement(elem); + if (typeof(tagName) == 'undefined' || tagName === null) { + tagName = '*'; + } else { + tagName = tagName.toUpperCase(); + } + if (typeof(className) == 'undefined' || className === null) { + className = null; + } + if (elem) { + elem = elem.parentNode; + } + while (elem && elem.tagName) { + var curTagName = elem.tagName.toUpperCase(); + if ((tagName === '*' || tagName == curTagName) && + (className === null || self.hasElementClass(elem, className))) { + return elem; + } + elem = elem.parentNode; + } + return null; + }, + + __new__: function (win) { + + var m = MochiKit.Base; + if (typeof(document) != "undefined") { + this._document = document; + var kXULNSURI = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + this._xhtml = (document.documentElement && + document.createElementNS && + document.documentElement.namespaceURI === kXULNSURI); + } else if (MochiKit.MockDOM) { + this._document = MochiKit.MockDOM.document; + } + this._window = win; + + this.domConverters = new m.AdapterRegistry(); + + var __tmpElement = this._document.createElement("span"); + var attributeArray; + if (__tmpElement && __tmpElement.attributes && + __tmpElement.attributes.length > 0) { + // for braindead browsers (IE) that insert extra junk + var filter = m.filter; + attributeArray = function (node) { + /*** + + Return an array of attributes for a given node, + filtering out attributes that don't belong for + that are inserted by "Certain Browsers". + + ***/ + return filter(attributeArray.ignoreAttrFilter, node.attributes); + }; + attributeArray.ignoreAttr = {}; + var attrs = __tmpElement.attributes; + var ignoreAttr = attributeArray.ignoreAttr; + for (var i = 0; i < attrs.length; i++) { + var a = attrs[i]; + ignoreAttr[a.name] = a.value; + } + attributeArray.ignoreAttrFilter = function (a) { + return (attributeArray.ignoreAttr[a.name] != a.value); + }; + attributeArray.compliant = false; + attributeArray.renames = { + "class": "className", + "checked": "defaultChecked", + "usemap": "useMap", + "for": "htmlFor", + "readonly": "readOnly", + "colspan": "colSpan", + "bgcolor": "bgColor", + "cellspacing": "cellSpacing", + "cellpadding": "cellPadding" + }; + } else { + attributeArray = function (node) { + return node.attributes; + }; + attributeArray.compliant = true; + attributeArray.ignoreAttr = {}; + attributeArray.renames = {}; + } + this.attributeArray = attributeArray; + + // FIXME: this really belongs in Base, and could probably be cleaner + var _deprecated = function(fromModule, arr) { + var fromName = arr[0]; + var toName = arr[1]; + var toModule = toName.split('.')[1]; + var str = ''; + + str += 'if (!MochiKit.' + toModule + ') { throw new Error("'; + str += 'This function has been deprecated and depends on MochiKit.'; + str += toModule + '.");}'; + str += 'return ' + toName + '.apply(this, arguments);'; + MochiKit[fromModule][fromName] = new Function(str); + } + for (var i = 0; i < MochiKit.DOM.DEPRECATED.length; i++) { + _deprecated('DOM', MochiKit.DOM.DEPRECATED[i]); + } + + // shorthand for createDOM syntax + var createDOMFunc = this.createDOMFunc; + /** @id MochiKit.DOM.UL */ + this.UL = createDOMFunc("ul"); + /** @id MochiKit.DOM.OL */ + this.OL = createDOMFunc("ol"); + /** @id MochiKit.DOM.LI */ + this.LI = createDOMFunc("li"); + /** @id MochiKit.DOM.DL */ + this.DL = createDOMFunc("dl"); + /** @id MochiKit.DOM.DT */ + this.DT = createDOMFunc("dt"); + /** @id MochiKit.DOM.DD */ + this.DD = createDOMFunc("dd"); + /** @id MochiKit.DOM.TD */ + this.TD = createDOMFunc("td"); + /** @id MochiKit.DOM.TR */ + this.TR = createDOMFunc("tr"); + /** @id MochiKit.DOM.TBODY */ + this.TBODY = createDOMFunc("tbody"); + /** @id MochiKit.DOM.THEAD */ + this.THEAD = createDOMFunc("thead"); + /** @id MochiKit.DOM.TFOOT */ + this.TFOOT = createDOMFunc("tfoot"); + /** @id MochiKit.DOM.TABLE */ + this.TABLE = createDOMFunc("table"); + /** @id MochiKit.DOM.TH */ + this.TH = createDOMFunc("th"); + /** @id MochiKit.DOM.INPUT */ + this.INPUT = createDOMFunc("input"); + /** @id MochiKit.DOM.SPAN */ + this.SPAN = createDOMFunc("span"); + /** @id MochiKit.DOM.A */ + this.A = createDOMFunc("a"); + /** @id MochiKit.DOM.DIV */ + this.DIV = createDOMFunc("div"); + /** @id MochiKit.DOM.IMG */ + this.IMG = createDOMFunc("img"); + /** @id MochiKit.DOM.BUTTON */ + this.BUTTON = createDOMFunc("button"); + /** @id MochiKit.DOM.TT */ + this.TT = createDOMFunc("tt"); + /** @id MochiKit.DOM.PRE */ + this.PRE = createDOMFunc("pre"); + /** @id MochiKit.DOM.H1 */ + this.H1 = createDOMFunc("h1"); + /** @id MochiKit.DOM.H2 */ + this.H2 = createDOMFunc("h2"); + /** @id MochiKit.DOM.H3 */ + this.H3 = createDOMFunc("h3"); + /** @id MochiKit.DOM.H4 */ + this.H4 = createDOMFunc("h4"); + /** @id MochiKit.DOM.H5 */ + this.H5 = createDOMFunc("h5"); + /** @id MochiKit.DOM.H6 */ + this.H6 = createDOMFunc("h6"); + /** @id MochiKit.DOM.BR */ + this.BR = createDOMFunc("br"); + /** @id MochiKit.DOM.HR */ + this.HR = createDOMFunc("hr"); + /** @id MochiKit.DOM.LABEL */ + this.LABEL = createDOMFunc("label"); + /** @id MochiKit.DOM.TEXTAREA */ + this.TEXTAREA = createDOMFunc("textarea"); + /** @id MochiKit.DOM.FORM */ + this.FORM = createDOMFunc("form"); + /** @id MochiKit.DOM.P */ + this.P = createDOMFunc("p"); + /** @id MochiKit.DOM.SELECT */ + this.SELECT = createDOMFunc("select"); + /** @id MochiKit.DOM.OPTION */ + this.OPTION = createDOMFunc("option"); + /** @id MochiKit.DOM.OPTGROUP */ + this.OPTGROUP = createDOMFunc("optgroup"); + /** @id MochiKit.DOM.LEGEND */ + this.LEGEND = createDOMFunc("legend"); + /** @id MochiKit.DOM.FIELDSET */ + this.FIELDSET = createDOMFunc("fieldset"); + /** @id MochiKit.DOM.STRONG */ + this.STRONG = createDOMFunc("strong"); + /** @id MochiKit.DOM.CANVAS */ + this.CANVAS = createDOMFunc("canvas"); + + /** @id MochiKit.DOM.$ */ + this.$ = this.getElement; + + this.EXPORT_TAGS = { + ":common": this.EXPORT, + ":all": m.concat(this.EXPORT, this.EXPORT_OK) + }; + + m.nameFunctions(this); + + } +}); + + +MochiKit.DOM.__new__(((typeof(window) == "undefined") ? this : window)); + +// +// XXX: Internet Explorer blows +// +if (MochiKit.__export__) { + withWindow = MochiKit.DOM.withWindow; + withDocument = MochiKit.DOM.withDocument; +} + +MochiKit.Base._exportSymbols(this, MochiKit.DOM); diff --git a/static/MochiKit/DateTime.js b/static/MochiKit/DateTime.js new file mode 100644 index 0000000..cbb3c91 --- /dev/null +++ b/static/MochiKit/DateTime.js @@ -0,0 +1,222 @@ +/*** + +MochiKit.DateTime 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito. All rights Reserved. + +***/ + +MochiKit.Base._deps('DateTime', ['Base']); + +MochiKit.DateTime.NAME = "MochiKit.DateTime"; +MochiKit.DateTime.VERSION = "1.4.2"; +MochiKit.DateTime.__repr__ = function () { + return "[" + this.NAME + " " + this.VERSION + "]"; +}; +MochiKit.DateTime.toString = function () { + return this.__repr__(); +}; + +/** @id MochiKit.DateTime.isoDate */ +MochiKit.DateTime.isoDate = function (str) { + str = str + ""; + if (typeof(str) != "string" || str.length === 0) { + return null; + } + var iso = str.split('-'); + if (iso.length === 0) { + return null; + } + var date = new Date(iso[0], iso[1] - 1, iso[2]); + date.setFullYear(iso[0]); + date.setMonth(iso[1] - 1); + date.setDate(iso[2]); + return date; +}; + +MochiKit.DateTime._isoRegexp = /(\d{4,})(?:-(\d{1,2})(?:-(\d{1,2})(?:[T ](\d{1,2}):(\d{1,2})(?::(\d{1,2})(?:\.(\d+))?)?(?:(Z)|([+-])(\d{1,2})(?::(\d{1,2}))?)?)?)?)?/; + +/** @id MochiKit.DateTime.isoTimestamp */ +MochiKit.DateTime.isoTimestamp = function (str) { + str = str + ""; + if (typeof(str) != "string" || str.length === 0) { + return null; + } + var res = str.match(MochiKit.DateTime._isoRegexp); + if (typeof(res) == "undefined" || res === null) { + return null; + } + var year, month, day, hour, min, sec, msec; + year = parseInt(res[1], 10); + if (typeof(res[2]) == "undefined" || res[2] === '') { + return new Date(year); + } + month = parseInt(res[2], 10) - 1; + day = parseInt(res[3], 10); + if (typeof(res[4]) == "undefined" || res[4] === '') { + return new Date(year, month, day); + } + hour = parseInt(res[4], 10); + min = parseInt(res[5], 10); + sec = (typeof(res[6]) != "undefined" && res[6] !== '') ? parseInt(res[6], 10) : 0; + if (typeof(res[7]) != "undefined" && res[7] !== '') { + msec = Math.round(1000.0 * parseFloat("0." + res[7])); + } else { + msec = 0; + } + if ((typeof(res[8]) == "undefined" || res[8] === '') && (typeof(res[9]) == "undefined" || res[9] === '')) { + return new Date(year, month, day, hour, min, sec, msec); + } + var ofs; + if (typeof(res[9]) != "undefined" && res[9] !== '') { + ofs = parseInt(res[10], 10) * 3600000; + if (typeof(res[11]) != "undefined" && res[11] !== '') { + ofs += parseInt(res[11], 10) * 60000; + } + if (res[9] == "-") { + ofs = -ofs; + } + } else { + ofs = 0; + } + return new Date(Date.UTC(year, month, day, hour, min, sec, msec) - ofs); +}; + +/** @id MochiKit.DateTime.toISOTime */ +MochiKit.DateTime.toISOTime = function (date, realISO/* = false */) { + if (typeof(date) == "undefined" || date === null) { + return null; + } + var hh = date.getHours(); + var mm = date.getMinutes(); + var ss = date.getSeconds(); + var lst = [ + ((realISO && (hh < 10)) ? "0" + hh : hh), + ((mm < 10) ? "0" + mm : mm), + ((ss < 10) ? "0" + ss : ss) + ]; + return lst.join(":"); +}; + +/** @id MochiKit.DateTime.toISOTimeStamp */ +MochiKit.DateTime.toISOTimestamp = function (date, realISO/* = false*/) { + if (typeof(date) == "undefined" || date === null) { + return null; + } + var sep = realISO ? "T" : " "; + var foot = realISO ? "Z" : ""; + if (realISO) { + date = new Date(date.getTime() + (date.getTimezoneOffset() * 60000)); + } + return MochiKit.DateTime.toISODate(date) + sep + MochiKit.DateTime.toISOTime(date, realISO) + foot; +}; + +/** @id MochiKit.DateTime.toISODate */ +MochiKit.DateTime.toISODate = function (date) { + if (typeof(date) == "undefined" || date === null) { + return null; + } + var _padTwo = MochiKit.DateTime._padTwo; + var _padFour = MochiKit.DateTime._padFour; + return [ + _padFour(date.getFullYear()), + _padTwo(date.getMonth() + 1), + _padTwo(date.getDate()) + ].join("-"); +}; + +/** @id MochiKit.DateTime.americanDate */ +MochiKit.DateTime.americanDate = function (d) { + d = d + ""; + if (typeof(d) != "string" || d.length === 0) { + return null; + } + var a = d.split('/'); + return new Date(a[2], a[0] - 1, a[1]); +}; + +MochiKit.DateTime._padTwo = function (n) { + return (n > 9) ? n : "0" + n; +}; + +MochiKit.DateTime._padFour = function(n) { + switch(n.toString().length) { + case 1: return "000" + n; break; + case 2: return "00" + n; break; + case 3: return "0" + n; break; + case 4: + default: + return n; + } +}; + +/** @id MochiKit.DateTime.toPaddedAmericanDate */ +MochiKit.DateTime.toPaddedAmericanDate = function (d) { + if (typeof(d) == "undefined" || d === null) { + return null; + } + var _padTwo = MochiKit.DateTime._padTwo; + return [ + _padTwo(d.getMonth() + 1), + _padTwo(d.getDate()), + d.getFullYear() + ].join('/'); +}; + +/** @id MochiKit.DateTime.toAmericanDate */ +MochiKit.DateTime.toAmericanDate = function (d) { + if (typeof(d) == "undefined" || d === null) { + return null; + } + return [d.getMonth() + 1, d.getDate(), d.getFullYear()].join('/'); +}; + +MochiKit.DateTime.EXPORT = [ + "isoDate", + "isoTimestamp", + "toISOTime", + "toISOTimestamp", + "toISODate", + "americanDate", + "toPaddedAmericanDate", + "toAmericanDate" +]; + +MochiKit.DateTime.EXPORT_OK = []; +MochiKit.DateTime.EXPORT_TAGS = { + ":common": MochiKit.DateTime.EXPORT, + ":all": MochiKit.DateTime.EXPORT +}; + +MochiKit.DateTime.__new__ = function () { + // MochiKit.Base.nameFunctions(this); + var base = this.NAME + "."; + for (var k in this) { + var o = this[k]; + if (typeof(o) == 'function' && typeof(o.NAME) == 'undefined') { + try { + o.NAME = base + k; + } catch (e) { + // pass + } + } + } +}; + +MochiKit.DateTime.__new__(); + +if (typeof(MochiKit.Base) != "undefined") { + MochiKit.Base._exportSymbols(this, MochiKit.DateTime); +} else { + (function (globals, module) { + if ((typeof(JSAN) == 'undefined' && typeof(dojo) == 'undefined') + || (MochiKit.__export__ === false)) { + var all = module.EXPORT_TAGS[":all"]; + for (var i = 0; i < all.length; i++) { + globals[all[i]] = module[all[i]]; + } + } + })(this, MochiKit.DateTime); +} diff --git a/static/MochiKit/DragAndDrop.js b/static/MochiKit/DragAndDrop.js new file mode 100644 index 0000000..b23b102 --- /dev/null +++ b/static/MochiKit/DragAndDrop.js @@ -0,0 +1,793 @@ +/*** +MochiKit.DragAndDrop 1.4.2 + +See for documentation, downloads, license, etc. + +Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) + Mochi-ized By Thomas Herve (_firstname_@nimail.org) + +***/ + +MochiKit.Base._deps('DragAndDrop', ['Base', 'Iter', 'DOM', 'Signal', 'Visual', 'Position']); + +MochiKit.DragAndDrop.NAME = 'MochiKit.DragAndDrop'; +MochiKit.DragAndDrop.VERSION = '1.4.2'; + +MochiKit.DragAndDrop.__repr__ = function () { + return '[' + this.NAME + ' ' + this.VERSION + ']'; +}; + +MochiKit.DragAndDrop.toString = function () { + return this.__repr__(); +}; + +MochiKit.DragAndDrop.EXPORT = [ + "Droppable", + "Draggable" +]; + +MochiKit.DragAndDrop.EXPORT_OK = [ + "Droppables", + "Draggables" +]; + +MochiKit.DragAndDrop.Droppables = { + /*** + + Manage all droppables. Shouldn't be used, use the Droppable object instead. + + ***/ + drops: [], + + remove: function (element) { + this.drops = MochiKit.Base.filter(function (d) { + return d.element != MochiKit.DOM.getElement(element); + }, this.drops); + }, + + register: function (drop) { + this.drops.push(drop); + }, + + unregister: function (drop) { + this.drops = MochiKit.Base.filter(function (d) { + return d != drop; + }, this.drops); + }, + + prepare: function (element) { + MochiKit.Base.map(function (drop) { + if (drop.isAccepted(element)) { + if (drop.options.activeclass) { + MochiKit.DOM.addElementClass(drop.element, + drop.options.activeclass); + } + drop.options.onactive(drop.element, element); + } + }, this.drops); + }, + + findDeepestChild: function (drops) { + deepest = drops[0]; + + for (i = 1; i < drops.length; ++i) { + if (MochiKit.DOM.isChildNode(drops[i].element, deepest.element)) { + deepest = drops[i]; + } + } + return deepest; + }, + + show: function (point, element) { + if (!this.drops.length) { + return; + } + var affected = []; + + if (this.last_active) { + this.last_active.deactivate(); + } + MochiKit.Iter.forEach(this.drops, function (drop) { + if (drop.isAffected(point, element)) { + affected.push(drop); + } + }); + if (affected.length > 0) { + drop = this.findDeepestChild(affected); + MochiKit.Position.within(drop.element, point.page.x, point.page.y); + drop.options.onhover(element, drop.element, + MochiKit.Position.overlap(drop.options.overlap, drop.element)); + drop.activate(); + } + }, + + fire: function (event, element) { + if (!this.last_active) { + return; + } + MochiKit.Position.prepare(); + + if (this.last_active.isAffected(event.mouse(), element)) { + this.last_active.options.ondrop(element, + this.last_active.element, event); + } + }, + + reset: function (element) { + MochiKit.Base.map(function (drop) { + if (drop.options.activeclass) { + MochiKit.DOM.removeElementClass(drop.element, + drop.options.activeclass); + } + drop.options.ondesactive(drop.element, element); + }, this.drops); + if (this.last_active) { + this.last_active.deactivate(); + } + } +}; + +/** @id MochiKit.DragAndDrop.Droppable */ +MochiKit.DragAndDrop.Droppable = function (element, options) { + var cls = arguments.callee; + if (!(this instanceof cls)) { + return new cls(element, options); + } + this.__init__(element, options); +}; + +MochiKit.DragAndDrop.Droppable.prototype = { + /*** + + A droppable object. Simple use is to create giving an element: + + new MochiKit.DragAndDrop.Droppable('myelement'); + + Generally you'll want to define the 'ondrop' function and maybe the + 'accept' option to filter draggables. + + ***/ + __class__: MochiKit.DragAndDrop.Droppable, + + __init__: function (element, /* optional */options) { + var d = MochiKit.DOM; + var b = MochiKit.Base; + this.element = d.getElement(element); + this.options = b.update({ + + /** @id MochiKit.DragAndDrop.greedy */ + greedy: true, + + /** @id MochiKit.DragAndDrop.hoverclass */ + hoverclass: null, + + /** @id MochiKit.DragAndDrop.activeclass */ + activeclass: null, + + /** @id MochiKit.DragAndDrop.hoverfunc */ + hoverfunc: b.noop, + + /** @id MochiKit.DragAndDrop.accept */ + accept: null, + + /** @id MochiKit.DragAndDrop.onactive */ + onactive: b.noop, + + /** @id MochiKit.DragAndDrop.ondesactive */ + ondesactive: b.noop, + + /** @id MochiKit.DragAndDrop.onhover */ + onhover: b.noop, + + /** @id MochiKit.DragAndDrop.ondrop */ + ondrop: b.noop, + + /** @id MochiKit.DragAndDrop.containment */ + containment: [], + tree: false + }, options); + + // cache containers + this.options._containers = []; + b.map(MochiKit.Base.bind(function (c) { + this.options._containers.push(d.getElement(c)); + }, this), this.options.containment); + + MochiKit.Style.makePositioned(this.element); // fix IE + + MochiKit.DragAndDrop.Droppables.register(this); + }, + + /** @id MochiKit.DragAndDrop.isContained */ + isContained: function (element) { + if (this.options._containers.length) { + var containmentNode; + if (this.options.tree) { + containmentNode = element.treeNode; + } else { + containmentNode = element.parentNode; + } + return MochiKit.Iter.some(this.options._containers, function (c) { + return containmentNode == c; + }); + } else { + return true; + } + }, + + /** @id MochiKit.DragAndDrop.isAccepted */ + isAccepted: function (element) { + return ((!this.options.accept) || MochiKit.Iter.some( + this.options.accept, function (c) { + return MochiKit.DOM.hasElementClass(element, c); + })); + }, + + /** @id MochiKit.DragAndDrop.isAffected */ + isAffected: function (point, element) { + return ((this.element != element) && + this.isContained(element) && + this.isAccepted(element) && + MochiKit.Position.within(this.element, point.page.x, + point.page.y)); + }, + + /** @id MochiKit.DragAndDrop.deactivate */ + deactivate: function () { + /*** + + A droppable is deactivate when a draggable has been over it and left. + + ***/ + if (this.options.hoverclass) { + MochiKit.DOM.removeElementClass(this.element, + this.options.hoverclass); + } + this.options.hoverfunc(this.element, false); + MochiKit.DragAndDrop.Droppables.last_active = null; + }, + + /** @id MochiKit.DragAndDrop.activate */ + activate: function () { + /*** + + A droppable is active when a draggable is over it. + + ***/ + if (this.options.hoverclass) { + MochiKit.DOM.addElementClass(this.element, this.options.hoverclass); + } + this.options.hoverfunc(this.element, true); + MochiKit.DragAndDrop.Droppables.last_active = this; + }, + + /** @id MochiKit.DragAndDrop.destroy */ + destroy: function () { + /*** + + Delete this droppable. + + ***/ + MochiKit.DragAndDrop.Droppables.unregister(this); + }, + + /** @id MochiKit.DragAndDrop.repr */ + repr: function () { + return '[' + this.__class__.NAME + ", options:" + MochiKit.Base.repr(this.options) + "]"; + } +}; + +MochiKit.DragAndDrop.Draggables = { + /*** + + Manage draggables elements. Not intended to direct use. + + ***/ + drags: [], + + register: function (draggable) { + if (this.drags.length === 0) { + var conn = MochiKit.Signal.connect; + this.eventMouseUp = conn(document, 'onmouseup', this, this.endDrag); + this.eventMouseMove = conn(document, 'onmousemove', this, + this.updateDrag); + this.eventKeypress = conn(document, 'onkeypress', this, + this.keyPress); + } + this.drags.push(draggable); + }, + + unregister: function (draggable) { + this.drags = MochiKit.Base.filter(function (d) { + return d != draggable; + }, this.drags); + if (this.drags.length === 0) { + var disc = MochiKit.Signal.disconnect; + disc(this.eventMouseUp); + disc(this.eventMouseMove); + disc(this.eventKeypress); + } + }, + + activate: function (draggable) { + // allows keypress events if window is not currently focused + // fails for Safari + window.focus(); + this.activeDraggable = draggable; + }, + + deactivate: function () { + this.activeDraggable = null; + }, + + updateDrag: function (event) { + if (!this.activeDraggable) { + return; + } + var pointer = event.mouse(); + // Mozilla-based browsers fire successive mousemove events with + // the same coordinates, prevent needless redrawing (moz bug?) + if (this._lastPointer && (MochiKit.Base.repr(this._lastPointer.page) == + MochiKit.Base.repr(pointer.page))) { + return; + } + this._lastPointer = pointer; + this.activeDraggable.updateDrag(event, pointer); + }, + + endDrag: function (event) { + if (!this.activeDraggable) { + return; + } + this._lastPointer = null; + this.activeDraggable.endDrag(event); + this.activeDraggable = null; + }, + + keyPress: function (event) { + if (this.activeDraggable) { + this.activeDraggable.keyPress(event); + } + }, + + notify: function (eventName, draggable, event) { + MochiKit.Signal.signal(this, eventName, draggable, event); + } +}; + +/** @id MochiKit.DragAndDrop.Draggable */ +MochiKit.DragAndDrop.Draggable = function (element, options) { + var cls = arguments.callee; + if (!(this instanceof cls)) { + return new cls(element, options); + } + this.__init__(element, options); +}; + +MochiKit.DragAndDrop.Draggable.prototype = { + /*** + + A draggable object. Simple instantiate : + + new MochiKit.DragAndDrop.Draggable('myelement'); + + ***/ + __class__ : MochiKit.DragAndDrop.Draggable, + + __init__: function (element, /* optional */options) { + var v = MochiKit.Visual; + var b = MochiKit.Base; + options = b.update({ + + /** @id MochiKit.DragAndDrop.handle */ + handle: false, + + /** @id MochiKit.DragAndDrop.starteffect */ + starteffect: function (innerelement) { + this._savedOpacity = MochiKit.Style.getStyle(innerelement, 'opacity') || 1.0; + new v.Opacity(innerelement, {duration:0.2, from:this._savedOpacity, to:0.7}); + }, + /** @id MochiKit.DragAndDrop.reverteffect */ + reverteffect: function (innerelement, top_offset, left_offset) { + var dur = Math.sqrt(Math.abs(top_offset^2) + + Math.abs(left_offset^2))*0.02; + return new v.Move(innerelement, + {x: -left_offset, y: -top_offset, duration: dur}); + }, + + /** @id MochiKit.DragAndDrop.endeffect */ + endeffect: function (innerelement) { + new v.Opacity(innerelement, {duration:0.2, from:0.7, to:this._savedOpacity}); + }, + + /** @id MochiKit.DragAndDrop.onchange */ + onchange: b.noop, + + /** @id MochiKit.DragAndDrop.zindex */ + zindex: 1000, + + /** @id MochiKit.DragAndDrop.revert */ + revert: false, + + /** @id MochiKit.DragAndDrop.scroll */ + scroll: false, + + /** @id MochiKit.DragAndDrop.scrollSensitivity */ + scrollSensitivity: 20, + + /** @id MochiKit.DragAndDrop.scrollSpeed */ + scrollSpeed: 15, + // false, or xy or [x, y] or function (x, y){return [x, y];} + + /** @id MochiKit.DragAndDrop.snap */ + snap: false + }, options); + + var d = MochiKit.DOM; + this.element = d.getElement(element); + + if (options.handle && (typeof(options.handle) == 'string')) { + this.handle = d.getFirstElementByTagAndClassName(null, + options.handle, this.element); + } + if (!this.handle) { + this.handle = d.getElement(options.handle); + } + if (!this.handle) { + this.handle = this.element; + } + + if (options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) { + options.scroll = d.getElement(options.scroll); + this._isScrollChild = MochiKit.DOM.isChildNode(this.element, options.scroll); + } + + MochiKit.Style.makePositioned(this.element); // fix IE + + this.delta = this.currentDelta(); + this.options = options; + this.dragging = false; + + this.eventMouseDown = MochiKit.Signal.connect(this.handle, + 'onmousedown', this, this.initDrag); + MochiKit.DragAndDrop.Draggables.register(this); + }, + + /** @id MochiKit.DragAndDrop.destroy */ + destroy: function () { + MochiKit.Signal.disconnect(this.eventMouseDown); + MochiKit.DragAndDrop.Draggables.unregister(this); + }, + + /** @id MochiKit.DragAndDrop.currentDelta */ + currentDelta: function () { + var s = MochiKit.Style.getStyle; + return [ + parseInt(s(this.element, 'left') || '0'), + parseInt(s(this.element, 'top') || '0')]; + }, + + /** @id MochiKit.DragAndDrop.initDrag */ + initDrag: function (event) { + if (!event.mouse().button.left) { + return; + } + // abort on form elements, fixes a Firefox issue + var src = event.target(); + var tagName = (src.tagName || '').toUpperCase(); + if (tagName === 'INPUT' || tagName === 'SELECT' || + tagName === 'OPTION' || tagName === 'BUTTON' || + tagName === 'TEXTAREA') { + return; + } + + if (this._revert) { + this._revert.cancel(); + this._revert = null; + } + + var pointer = event.mouse(); + var pos = MochiKit.Position.cumulativeOffset(this.element); + this.offset = [pointer.page.x - pos.x, pointer.page.y - pos.y]; + + MochiKit.DragAndDrop.Draggables.activate(this); + event.stop(); + }, + + /** @id MochiKit.DragAndDrop.startDrag */ + startDrag: function (event) { + this.dragging = true; + if (this.options.selectclass) { + MochiKit.DOM.addElementClass(this.element, + this.options.selectclass); + } + if (this.options.zindex) { + this.originalZ = parseInt(MochiKit.Style.getStyle(this.element, + 'z-index') || '0'); + this.element.style.zIndex = this.options.zindex; + } + + if (this.options.ghosting) { + this._clone = this.element.cloneNode(true); + this.ghostPosition = MochiKit.Position.absolutize(this.element); + this.element.parentNode.insertBefore(this._clone, this.element); + } + + if (this.options.scroll) { + if (this.options.scroll == window) { + var where = this._getWindowScroll(this.options.scroll); + this.originalScrollLeft = where.left; + this.originalScrollTop = where.top; + } else { + this.originalScrollLeft = this.options.scroll.scrollLeft; + this.originalScrollTop = this.options.scroll.scrollTop; + } + } + + MochiKit.DragAndDrop.Droppables.prepare(this.element); + MochiKit.DragAndDrop.Draggables.notify('start', this, event); + if (this.options.starteffect) { + this.options.starteffect(this.element); + } + }, + + /** @id MochiKit.DragAndDrop.updateDrag */ + updateDrag: function (event, pointer) { + if (!this.dragging) { + this.startDrag(event); + } + MochiKit.Position.prepare(); + MochiKit.DragAndDrop.Droppables.show(pointer, this.element); + MochiKit.DragAndDrop.Draggables.notify('drag', this, event); + this.draw(pointer); + this.options.onchange(this); + + if (this.options.scroll) { + this.stopScrolling(); + var p, q; + if (this.options.scroll == window) { + var s = this._getWindowScroll(this.options.scroll); + p = new MochiKit.Style.Coordinates(s.left, s.top); + q = new MochiKit.Style.Coordinates(s.left + s.width, + s.top + s.height); + } else { + p = MochiKit.Position.page(this.options.scroll); + p.x += this.options.scroll.scrollLeft; + p.y += this.options.scroll.scrollTop; + p.x += (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0); + p.y += (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0); + q = new MochiKit.Style.Coordinates(p.x + this.options.scroll.offsetWidth, + p.y + this.options.scroll.offsetHeight); + } + var speed = [0, 0]; + if (pointer.page.x > (q.x - this.options.scrollSensitivity)) { + speed[0] = pointer.page.x - (q.x - this.options.scrollSensitivity); + } else if (pointer.page.x < (p.x + this.options.scrollSensitivity)) { + speed[0] = pointer.page.x - (p.x + this.options.scrollSensitivity); + } + if (pointer.page.y > (q.y - this.options.scrollSensitivity)) { + speed[1] = pointer.page.y - (q.y - this.options.scrollSensitivity); + } else if (pointer.page.y < (p.y + this.options.scrollSensitivity)) { + speed[1] = pointer.page.y - (p.y + this.options.scrollSensitivity); + } + this.startScrolling(speed); + } + + // fix AppleWebKit rendering + if (/AppleWebKit/.test(navigator.appVersion)) { + window.scrollBy(0, 0); + } + event.stop(); + }, + + /** @id MochiKit.DragAndDrop.finishDrag */ + finishDrag: function (event, success) { + var dr = MochiKit.DragAndDrop; + this.dragging = false; + if (this.options.selectclass) { + MochiKit.DOM.removeElementClass(this.element, + this.options.selectclass); + } + + if (this.options.ghosting) { + // XXX: from a user point of view, it would be better to remove + // the node only *after* the MochiKit.Visual.Move end when used + // with revert. + MochiKit.Position.relativize(this.element, this.ghostPosition); + MochiKit.DOM.removeElement(this._clone); + this._clone = null; + } + + if (success) { + dr.Droppables.fire(event, this.element); + } + dr.Draggables.notify('end', this, event); + + var revert = this.options.revert; + if (revert && typeof(revert) == 'function') { + revert = revert(this.element); + } + + var d = this.currentDelta(); + if (revert && this.options.reverteffect) { + this._revert = this.options.reverteffect(this.element, + d[1] - this.delta[1], d[0] - this.delta[0]); + } else { + this.delta = d; + } + + if (this.options.zindex) { + this.element.style.zIndex = this.originalZ; + } + + if (this.options.endeffect) { + this.options.endeffect(this.element); + } + + dr.Draggables.deactivate(); + dr.Droppables.reset(this.element); + }, + + /** @id MochiKit.DragAndDrop.keyPress */ + keyPress: function (event) { + if (event.key().string != "KEY_ESCAPE") { + return; + } + this.finishDrag(event, false); + event.stop(); + }, + + /** @id MochiKit.DragAndDrop.endDrag */ + endDrag: function (event) { + if (!this.dragging) { + return; + } + this.stopScrolling(); + this.finishDrag(event, true); + event.stop(); + }, + + /** @id MochiKit.DragAndDrop.draw */ + draw: function (point) { + var pos = MochiKit.Position.cumulativeOffset(this.element); + var d = this.currentDelta(); + pos.x -= d[0]; + pos.y -= d[1]; + + if (this.options.scroll && (this.options.scroll != window && this._isScrollChild)) { + pos.x -= this.options.scroll.scrollLeft - this.originalScrollLeft; + pos.y -= this.options.scroll.scrollTop - this.originalScrollTop; + } + + var p = [point.page.x - pos.x - this.offset[0], + point.page.y - pos.y - this.offset[1]]; + + if (this.options.snap) { + if (typeof(this.options.snap) == 'function') { + p = this.options.snap(p[0], p[1]); + } else { + if (this.options.snap instanceof Array) { + var i = -1; + p = MochiKit.Base.map(MochiKit.Base.bind(function (v) { + i += 1; + return Math.round(v/this.options.snap[i]) * + this.options.snap[i]; + }, this), p); + } else { + p = MochiKit.Base.map(MochiKit.Base.bind(function (v) { + return Math.round(v/this.options.snap) * + this.options.snap; + }, this), p); + } + } + } + var style = this.element.style; + if ((!this.options.constraint) || + (this.options.constraint == 'horizontal')) { + style.left = p[0] + 'px'; + } + if ((!this.options.constraint) || + (this.options.constraint == 'vertical')) { + style.top = p[1] + 'px'; + } + if (style.visibility == 'hidden') { + style.visibility = ''; // fix gecko rendering + } + }, + + /** @id MochiKit.DragAndDrop.stopScrolling */ + stopScrolling: function () { + if (this.scrollInterval) { + clearInterval(this.scrollInterval); + this.scrollInterval = null; + MochiKit.DragAndDrop.Draggables._lastScrollPointer = null; + } + }, + + /** @id MochiKit.DragAndDrop.startScrolling */ + startScrolling: function (speed) { + if (!speed[0] && !speed[1]) { + return; + } + this.scrollSpeed = [speed[0] * this.options.scrollSpeed, + speed[1] * this.options.scrollSpeed]; + this.lastScrolled = new Date(); + this.scrollInterval = setInterval(MochiKit.Base.bind(this.scroll, this), 10); + }, + + /** @id MochiKit.DragAndDrop.scroll */ + scroll: function () { + var current = new Date(); + var delta = current - this.lastScrolled; + this.lastScrolled = current; + + if (this.options.scroll == window) { + var s = this._getWindowScroll(this.options.scroll); + if (this.scrollSpeed[0] || this.scrollSpeed[1]) { + var dm = delta / 1000; + this.options.scroll.scrollTo(s.left + dm * this.scrollSpeed[0], + s.top + dm * this.scrollSpeed[1]); + } + } else { + this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000; + this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000; + } + + var d = MochiKit.DragAndDrop; + + MochiKit.Position.prepare(); + d.Droppables.show(d.Draggables._lastPointer, this.element); + d.Draggables.notify('drag', this); + if (this._isScrollChild) { + d.Draggables._lastScrollPointer = d.Draggables._lastScrollPointer || d.Draggables._lastPointer; + d.Draggables._lastScrollPointer.x += this.scrollSpeed[0] * delta / 1000; + d.Draggables._lastScrollPointer.y += this.scrollSpeed[1] * delta / 1000; + if (d.Draggables._lastScrollPointer.x < 0) { + d.Draggables._lastScrollPointer.x = 0; + } + if (d.Draggables._lastScrollPointer.y < 0) { + d.Draggables._lastScrollPointer.y = 0; + } + this.draw(d.Draggables._lastScrollPointer); + } + + this.options.onchange(this); + }, + + _getWindowScroll: function (win) { + var vp, w, h; + MochiKit.DOM.withWindow(win, function () { + vp = MochiKit.Style.getViewportPosition(win.document); + }); + if (win.innerWidth) { + w = win.innerWidth; + h = win.innerHeight; + } else if (win.document.documentElement && win.document.documentElement.clientWidth) { + w = win.document.documentElement.clientWidth; + h = win.document.documentElement.clientHeight; + } else { + w = win.document.body.offsetWidth; + h = win.document.body.offsetHeight; + } + return {top: vp.y, left: vp.x, width: w, height: h}; + }, + + /** @id MochiKit.DragAndDrop.repr */ + repr: function () { + return '[' + this.__class__.NAME + ", options:" + MochiKit.Base.repr(this.options) + "]"; + } +}; + +MochiKit.DragAndDrop.__new__ = function () { + MochiKit.Base.nameFunctions(this); + + this.EXPORT_TAGS = { + ":common": this.EXPORT, + ":all": MochiKit.Base.concat(this.EXPORT, this.EXPORT_OK) + }; +}; + +MochiKit.DragAndDrop.__new__(); + +MochiKit.Base._exportSymbols(this, MochiKit.DragAndDrop); + diff --git a/static/MochiKit/Format.js b/static/MochiKit/Format.js new file mode 100644 index 0000000..36b7153 --- /dev/null +++ b/static/MochiKit/Format.js @@ -0,0 +1,304 @@ +/*** + +MochiKit.Format 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito. All rights Reserved. + +***/ + +MochiKit.Base._deps('Format', ['Base']); + +MochiKit.Format.NAME = "MochiKit.Format"; +MochiKit.Format.VERSION = "1.4.2"; +MochiKit.Format.__repr__ = function () { + return "[" + this.NAME + " " + this.VERSION + "]"; +}; +MochiKit.Format.toString = function () { + return this.__repr__(); +}; + +MochiKit.Format._numberFormatter = function (placeholder, header, footer, locale, isPercent, precision, leadingZeros, separatorAt, trailingZeros) { + return function (num) { + num = parseFloat(num); + if (typeof(num) == "undefined" || num === null || isNaN(num)) { + return placeholder; + } + var curheader = header; + var curfooter = footer; + if (num < 0) { + num = -num; + } else { + curheader = curheader.replace(/-/, ""); + } + var me = arguments.callee; + var fmt = MochiKit.Format.formatLocale(locale); + if (isPercent) { + num = num * 100.0; + curfooter = fmt.percent + curfooter; + } + num = MochiKit.Format.roundToFixed(num, precision); + var parts = num.split(/\./); + var whole = parts[0]; + var frac = (parts.length == 1) ? "" : parts[1]; + var res = ""; + while (whole.length < leadingZeros) { + whole = "0" + whole; + } + if (separatorAt) { + while (whole.length > separatorAt) { + var i = whole.length - separatorAt; + //res = res + fmt.separator + whole.substring(i, whole.length); + res = fmt.separator + whole.substring(i, whole.length) + res; + whole = whole.substring(0, i); + } + } + res = whole + res; + if (precision > 0) { + while (frac.length < trailingZeros) { + frac = frac + "0"; + } + res = res + fmt.decimal + frac; + } + return curheader + res + curfooter; + }; +}; + +/** @id MochiKit.Format.numberFormatter */ +MochiKit.Format.numberFormatter = function (pattern, placeholder/* = "" */, locale/* = "default" */) { + // http://java.sun.com/docs/books/tutorial/i18n/format/numberpattern.html + // | 0 | leading or trailing zeros + // | # | just the number + // | , | separator + // | . | decimal separator + // | % | Multiply by 100 and format as percent + if (typeof(placeholder) == "undefined") { + placeholder = ""; + } + var match = pattern.match(/((?:[0#]+,)?[0#]+)(?:\.([0#]+))?(%)?/); + if (!match) { + throw TypeError("Invalid pattern"); + } + var header = pattern.substr(0, match.index); + var footer = pattern.substr(match.index + match[0].length); + if (header.search(/-/) == -1) { + header = header + "-"; + } + var whole = match[1]; + var frac = (typeof(match[2]) == "string" && match[2] != "") ? match[2] : ""; + var isPercent = (typeof(match[3]) == "string" && match[3] != ""); + var tmp = whole.split(/,/); + var separatorAt; + if (typeof(locale) == "undefined") { + locale = "default"; + } + if (tmp.length == 1) { + separatorAt = null; + } else { + separatorAt = tmp[1].length; + } + var leadingZeros = whole.length - whole.replace(/0/g, "").length; + var trailingZeros = frac.length - frac.replace(/0/g, "").length; + var precision = frac.length; + var rval = MochiKit.Format._numberFormatter( + placeholder, header, footer, locale, isPercent, precision, + leadingZeros, separatorAt, trailingZeros + ); + var m = MochiKit.Base; + if (m) { + var fn = arguments.callee; + var args = m.concat(arguments); + rval.repr = function () { + return [ + self.NAME, + "(", + map(m.repr, args).join(", "), + ")" + ].join(""); + }; + } + return rval; +}; + +/** @id MochiKit.Format.formatLocale */ +MochiKit.Format.formatLocale = function (locale) { + if (typeof(locale) == "undefined" || locale === null) { + locale = "default"; + } + if (typeof(locale) == "string") { + var rval = MochiKit.Format.LOCALE[locale]; + if (typeof(rval) == "string") { + rval = arguments.callee(rval); + MochiKit.Format.LOCALE[locale] = rval; + } + return rval; + } else { + return locale; + } +}; + +/** @id MochiKit.Format.twoDigitAverage */ +MochiKit.Format.twoDigitAverage = function (numerator, denominator) { + if (denominator) { + var res = numerator / denominator; + if (!isNaN(res)) { + return MochiKit.Format.twoDigitFloat(res); + } + } + return "0"; +}; + +/** @id MochiKit.Format.twoDigitFloat */ +MochiKit.Format.twoDigitFloat = function (aNumber) { + var res = roundToFixed(aNumber, 2); + if (res.indexOf(".00") > 0) { + return res.substring(0, res.length - 3); + } else if (res.charAt(res.length - 1) == "0") { + return res.substring(0, res.length - 1); + } else { + return res; + } +}; + +/** @id MochiKit.Format.lstrip */ +MochiKit.Format.lstrip = function (str, /* optional */chars) { + str = str + ""; + if (typeof(str) != "string") { + return null; + } + if (!chars) { + return str.replace(/^\s+/, ""); + } else { + return str.replace(new RegExp("^[" + chars + "]+"), ""); + } +}; + +/** @id MochiKit.Format.rstrip */ +MochiKit.Format.rstrip = function (str, /* optional */chars) { + str = str + ""; + if (typeof(str) != "string") { + return null; + } + if (!chars) { + return str.replace(/\s+$/, ""); + } else { + return str.replace(new RegExp("[" + chars + "]+$"), ""); + } +}; + +/** @id MochiKit.Format.strip */ +MochiKit.Format.strip = function (str, /* optional */chars) { + var self = MochiKit.Format; + return self.rstrip(self.lstrip(str, chars), chars); +}; + +/** @id MochiKit.Format.truncToFixed */ +MochiKit.Format.truncToFixed = function (aNumber, precision) { + var res = Math.floor(aNumber).toFixed(0); + if (aNumber < 0) { + res = Math.ceil(aNumber).toFixed(0); + if (res.charAt(0) != "-" && precision > 0) { + res = "-" + res; + } + } + if (res.indexOf("e") < 0 && precision > 0) { + var tail = aNumber.toString(); + if (tail.indexOf("e") > 0) { + tail = "."; + } else if (tail.indexOf(".") < 0) { + tail = "."; + } else { + tail = tail.substring(tail.indexOf(".")); + } + if (tail.length - 1 > precision) { + tail = tail.substring(0, precision + 1); + } + while (tail.length - 1 < precision) { + tail += "0"; + } + res += tail; + } + return res; +}; + +/** @id MochiKit.Format.roundToFixed */ +MochiKit.Format.roundToFixed = function (aNumber, precision) { + var upper = Math.abs(aNumber) + 0.5 * Math.pow(10, -precision); + var res = MochiKit.Format.truncToFixed(upper, precision); + if (aNumber < 0) { + res = "-" + res; + } + return res; +}; + +/** @id MochiKit.Format.percentFormat */ +MochiKit.Format.percentFormat = function (aNumber) { + return MochiKit.Format.twoDigitFloat(100 * aNumber) + '%'; +}; + +MochiKit.Format.EXPORT = [ + "truncToFixed", + "roundToFixed", + "numberFormatter", + "formatLocale", + "twoDigitAverage", + "twoDigitFloat", + "percentFormat", + "lstrip", + "rstrip", + "strip" +]; + +MochiKit.Format.LOCALE = { + en_US: {separator: ",", decimal: ".", percent: "%"}, + de_DE: {separator: ".", decimal: ",", percent: "%"}, + pt_BR: {separator: ".", decimal: ",", percent: "%"}, + fr_FR: {separator: " ", decimal: ",", percent: "%"}, + "default": "en_US" +}; + +MochiKit.Format.EXPORT_OK = []; +MochiKit.Format.EXPORT_TAGS = { + ':all': MochiKit.Format.EXPORT, + ':common': MochiKit.Format.EXPORT +}; + +MochiKit.Format.__new__ = function () { + // MochiKit.Base.nameFunctions(this); + var base = this.NAME + "."; + var k, v, o; + for (k in this.LOCALE) { + o = this.LOCALE[k]; + if (typeof(o) == "object") { + o.repr = function () { return this.NAME; }; + o.NAME = base + "LOCALE." + k; + } + } + for (k in this) { + o = this[k]; + if (typeof(o) == 'function' && typeof(o.NAME) == 'undefined') { + try { + o.NAME = base + k; + } catch (e) { + // pass + } + } + } +}; + +MochiKit.Format.__new__(); + +if (typeof(MochiKit.Base) != "undefined") { + MochiKit.Base._exportSymbols(this, MochiKit.Format); +} else { + (function (globals, module) { + if ((typeof(JSAN) == 'undefined' && typeof(dojo) == 'undefined') + || (MochiKit.__export__ === false)) { + var all = module.EXPORT_TAGS[":all"]; + for (var i = 0; i < all.length; i++) { + globals[all[i]] = module[all[i]]; + } + } + })(this, MochiKit.Format); +} diff --git a/static/MochiKit/Iter.js b/static/MochiKit/Iter.js new file mode 100644 index 0000000..99f3155 --- /dev/null +++ b/static/MochiKit/Iter.js @@ -0,0 +1,844 @@ +/*** + +MochiKit.Iter 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito. All rights Reserved. + +***/ + +MochiKit.Base._deps('Iter', ['Base']); + +MochiKit.Iter.NAME = "MochiKit.Iter"; +MochiKit.Iter.VERSION = "1.4.2"; +MochiKit.Base.update(MochiKit.Iter, { + __repr__: function () { + return "[" + this.NAME + " " + this.VERSION + "]"; + }, + toString: function () { + return this.__repr__(); + }, + + /** @id MochiKit.Iter.registerIteratorFactory */ + registerIteratorFactory: function (name, check, iterfactory, /* optional */ override) { + MochiKit.Iter.iteratorRegistry.register(name, check, iterfactory, override); + }, + + /** @id MochiKit.Iter.isIterable */ + isIterable: function(o) { + return o != null && + (typeof(o.next) == "function" || typeof(o.iter) == "function"); + }, + + /** @id MochiKit.Iter.iter */ + iter: function (iterable, /* optional */ sentinel) { + var self = MochiKit.Iter; + if (arguments.length == 2) { + return self.takewhile( + function (a) { return a != sentinel; }, + iterable + ); + } + if (typeof(iterable.next) == 'function') { + return iterable; + } else if (typeof(iterable.iter) == 'function') { + return iterable.iter(); + /* + } else if (typeof(iterable.__iterator__) == 'function') { + // + // XXX: We can't support JavaScript 1.7 __iterator__ directly + // because of Object.prototype.__iterator__ + // + return iterable.__iterator__(); + */ + } + + try { + return self.iteratorRegistry.match(iterable); + } catch (e) { + var m = MochiKit.Base; + if (e == m.NotFound) { + e = new TypeError(typeof(iterable) + ": " + m.repr(iterable) + " is not iterable"); + } + throw e; + } + }, + + /** @id MochiKit.Iter.count */ + count: function (n) { + if (!n) { + n = 0; + } + var m = MochiKit.Base; + return { + repr: function () { return "count(" + n + ")"; }, + toString: m.forwardCall("repr"), + next: m.counter(n) + }; + }, + + /** @id MochiKit.Iter.cycle */ + cycle: function (p) { + var self = MochiKit.Iter; + var m = MochiKit.Base; + var lst = []; + var iterator = self.iter(p); + return { + repr: function () { return "cycle(...)"; }, + toString: m.forwardCall("repr"), + next: function () { + try { + var rval = iterator.next(); + lst.push(rval); + return rval; + } catch (e) { + if (e != self.StopIteration) { + throw e; + } + if (lst.length === 0) { + this.next = function () { + throw self.StopIteration; + }; + } else { + var i = -1; + this.next = function () { + i = (i + 1) % lst.length; + return lst[i]; + }; + } + return this.next(); + } + } + }; + }, + + /** @id MochiKit.Iter.repeat */ + repeat: function (elem, /* optional */n) { + var m = MochiKit.Base; + if (typeof(n) == 'undefined') { + return { + repr: function () { + return "repeat(" + m.repr(elem) + ")"; + }, + toString: m.forwardCall("repr"), + next: function () { + return elem; + } + }; + } + return { + repr: function () { + return "repeat(" + m.repr(elem) + ", " + n + ")"; + }, + toString: m.forwardCall("repr"), + next: function () { + if (n <= 0) { + throw MochiKit.Iter.StopIteration; + } + n -= 1; + return elem; + } + }; + }, + + /** @id MochiKit.Iter.next */ + next: function (iterator) { + return iterator.next(); + }, + + /** @id MochiKit.Iter.izip */ + izip: function (p, q/*, ...*/) { + var m = MochiKit.Base; + var self = MochiKit.Iter; + var next = self.next; + var iterables = m.map(self.iter, arguments); + return { + repr: function () { return "izip(...)"; }, + toString: m.forwardCall("repr"), + next: function () { return m.map(next, iterables); } + }; + }, + + /** @id MochiKit.Iter.ifilter */ + ifilter: function (pred, seq) { + var m = MochiKit.Base; + seq = MochiKit.Iter.iter(seq); + if (pred === null) { + pred = m.operator.truth; + } + return { + repr: function () { return "ifilter(...)"; }, + toString: m.forwardCall("repr"), + next: function () { + while (true) { + var rval = seq.next(); + if (pred(rval)) { + return rval; + } + } + // mozilla warnings aren't too bright + return undefined; + } + }; + }, + + /** @id MochiKit.Iter.ifilterfalse */ + ifilterfalse: function (pred, seq) { + var m = MochiKit.Base; + seq = MochiKit.Iter.iter(seq); + if (pred === null) { + pred = m.operator.truth; + } + return { + repr: function () { return "ifilterfalse(...)"; }, + toString: m.forwardCall("repr"), + next: function () { + while (true) { + var rval = seq.next(); + if (!pred(rval)) { + return rval; + } + } + // mozilla warnings aren't too bright + return undefined; + } + }; + }, + + /** @id MochiKit.Iter.islice */ + islice: function (seq/*, [start,] stop[, step] */) { + var self = MochiKit.Iter; + var m = MochiKit.Base; + seq = self.iter(seq); + var start = 0; + var stop = 0; + var step = 1; + var i = -1; + if (arguments.length == 2) { + stop = arguments[1]; + } else if (arguments.length == 3) { + start = arguments[1]; + stop = arguments[2]; + } else { + start = arguments[1]; + stop = arguments[2]; + step = arguments[3]; + } + return { + repr: function () { + return "islice(" + ["...", start, stop, step].join(", ") + ")"; + }, + toString: m.forwardCall("repr"), + next: function () { + var rval; + while (i < start) { + rval = seq.next(); + i++; + } + if (start >= stop) { + throw self.StopIteration; + } + start += step; + return rval; + } + }; + }, + + /** @id MochiKit.Iter.imap */ + imap: function (fun, p, q/*, ...*/) { + var m = MochiKit.Base; + var self = MochiKit.Iter; + var iterables = m.map(self.iter, m.extend(null, arguments, 1)); + var map = m.map; + var next = self.next; + return { + repr: function () { return "imap(...)"; }, + toString: m.forwardCall("repr"), + next: function () { + return fun.apply(this, map(next, iterables)); + } + }; + }, + + /** @id MochiKit.Iter.applymap */ + applymap: function (fun, seq, self) { + seq = MochiKit.Iter.iter(seq); + var m = MochiKit.Base; + return { + repr: function () { return "applymap(...)"; }, + toString: m.forwardCall("repr"), + next: function () { + return fun.apply(self, seq.next()); + } + }; + }, + + /** @id MochiKit.Iter.chain */ + chain: function (p, q/*, ...*/) { + // dumb fast path + var self = MochiKit.Iter; + var m = MochiKit.Base; + if (arguments.length == 1) { + return self.iter(arguments[0]); + } + var argiter = m.map(self.iter, arguments); + return { + repr: function () { return "chain(...)"; }, + toString: m.forwardCall("repr"), + next: function () { + while (argiter.length > 1) { + try { + var result = argiter[0].next(); + return result; + } catch (e) { + if (e != self.StopIteration) { + throw e; + } + argiter.shift(); + var result = argiter[0].next(); + return result; + } + } + if (argiter.length == 1) { + // optimize last element + var arg = argiter.shift(); + this.next = m.bind("next", arg); + return this.next(); + } + throw self.StopIteration; + } + }; + }, + + /** @id MochiKit.Iter.takewhile */ + takewhile: function (pred, seq) { + var self = MochiKit.Iter; + seq = self.iter(seq); + return { + repr: function () { return "takewhile(...)"; }, + toString: MochiKit.Base.forwardCall("repr"), + next: function () { + var rval = seq.next(); + if (!pred(rval)) { + this.next = function () { + throw self.StopIteration; + }; + this.next(); + } + return rval; + } + }; + }, + + /** @id MochiKit.Iter.dropwhile */ + dropwhile: function (pred, seq) { + seq = MochiKit.Iter.iter(seq); + var m = MochiKit.Base; + var bind = m.bind; + return { + "repr": function () { return "dropwhile(...)"; }, + "toString": m.forwardCall("repr"), + "next": function () { + while (true) { + var rval = seq.next(); + if (!pred(rval)) { + break; + } + } + this.next = bind("next", seq); + return rval; + } + }; + }, + + _tee: function (ident, sync, iterable) { + sync.pos[ident] = -1; + var m = MochiKit.Base; + var listMin = m.listMin; + return { + repr: function () { return "tee(" + ident + ", ...)"; }, + toString: m.forwardCall("repr"), + next: function () { + var rval; + var i = sync.pos[ident]; + + if (i == sync.max) { + rval = iterable.next(); + sync.deque.push(rval); + sync.max += 1; + sync.pos[ident] += 1; + } else { + rval = sync.deque[i - sync.min]; + sync.pos[ident] += 1; + if (i == sync.min && listMin(sync.pos) != sync.min) { + sync.min += 1; + sync.deque.shift(); + } + } + return rval; + } + }; + }, + + /** @id MochiKit.Iter.tee */ + tee: function (iterable, n/* = 2 */) { + var rval = []; + var sync = { + "pos": [], + "deque": [], + "max": -1, + "min": -1 + }; + if (arguments.length == 1 || typeof(n) == "undefined" || n === null) { + n = 2; + } + var self = MochiKit.Iter; + iterable = self.iter(iterable); + var _tee = self._tee; + for (var i = 0; i < n; i++) { + rval.push(_tee(i, sync, iterable)); + } + return rval; + }, + + /** @id MochiKit.Iter.list */ + list: function (iterable) { + // Fast-path for Array and Array-like + var rval; + if (iterable instanceof Array) { + return iterable.slice(); + } + // this is necessary to avoid a Safari crash + if (typeof(iterable) == "function" && + !(iterable instanceof Function) && + typeof(iterable.length) == 'number') { + rval = []; + for (var i = 0; i < iterable.length; i++) { + rval.push(iterable[i]); + } + return rval; + } + + var self = MochiKit.Iter; + iterable = self.iter(iterable); + var rval = []; + var a_val; + try { + while (true) { + a_val = iterable.next(); + rval.push(a_val); + } + } catch (e) { + if (e != self.StopIteration) { + throw e; + } + return rval; + } + // mozilla warnings aren't too bright + return undefined; + }, + + + /** @id MochiKit.Iter.reduce */ + reduce: function (fn, iterable, /* optional */initial) { + var i = 0; + var x = initial; + var self = MochiKit.Iter; + iterable = self.iter(iterable); + if (arguments.length < 3) { + try { + x = iterable.next(); + } catch (e) { + if (e == self.StopIteration) { + e = new TypeError("reduce() of empty sequence with no initial value"); + } + throw e; + } + i++; + } + try { + while (true) { + x = fn(x, iterable.next()); + } + } catch (e) { + if (e != self.StopIteration) { + throw e; + } + } + return x; + }, + + /** @id MochiKit.Iter.range */ + range: function (/* [start,] stop[, step] */) { + var start = 0; + var stop = 0; + var step = 1; + if (arguments.length == 1) { + stop = arguments[0]; + } else if (arguments.length == 2) { + start = arguments[0]; + stop = arguments[1]; + } else if (arguments.length == 3) { + start = arguments[0]; + stop = arguments[1]; + step = arguments[2]; + } else { + throw new TypeError("range() takes 1, 2, or 3 arguments!"); + } + if (step === 0) { + throw new TypeError("range() step must not be 0"); + } + return { + next: function () { + if ((step > 0 && start >= stop) || (step < 0 && start <= stop)) { + throw MochiKit.Iter.StopIteration; + } + var rval = start; + start += step; + return rval; + }, + repr: function () { + return "range(" + [start, stop, step].join(", ") + ")"; + }, + toString: MochiKit.Base.forwardCall("repr") + }; + }, + + /** @id MochiKit.Iter.sum */ + sum: function (iterable, start/* = 0 */) { + if (typeof(start) == "undefined" || start === null) { + start = 0; + } + var x = start; + var self = MochiKit.Iter; + iterable = self.iter(iterable); + try { + while (true) { + x += iterable.next(); + } + } catch (e) { + if (e != self.StopIteration) { + throw e; + } + } + return x; + }, + + /** @id MochiKit.Iter.exhaust */ + exhaust: function (iterable) { + var self = MochiKit.Iter; + iterable = self.iter(iterable); + try { + while (true) { + iterable.next(); + } + } catch (e) { + if (e != self.StopIteration) { + throw e; + } + } + }, + + /** @id MochiKit.Iter.forEach */ + forEach: function (iterable, func, /* optional */obj) { + var m = MochiKit.Base; + var self = MochiKit.Iter; + if (arguments.length > 2) { + func = m.bind(func, obj); + } + // fast path for array + if (m.isArrayLike(iterable) && !self.isIterable(iterable)) { + try { + for (var i = 0; i < iterable.length; i++) { + func(iterable[i]); + } + } catch (e) { + if (e != self.StopIteration) { + throw e; + } + } + } else { + self.exhaust(self.imap(func, iterable)); + } + }, + + /** @id MochiKit.Iter.every */ + every: function (iterable, func) { + var self = MochiKit.Iter; + try { + self.ifilterfalse(func, iterable).next(); + return false; + } catch (e) { + if (e != self.StopIteration) { + throw e; + } + return true; + } + }, + + /** @id MochiKit.Iter.sorted */ + sorted: function (iterable, /* optional */cmp) { + var rval = MochiKit.Iter.list(iterable); + if (arguments.length == 1) { + cmp = MochiKit.Base.compare; + } + rval.sort(cmp); + return rval; + }, + + /** @id MochiKit.Iter.reversed */ + reversed: function (iterable) { + var rval = MochiKit.Iter.list(iterable); + rval.reverse(); + return rval; + }, + + /** @id MochiKit.Iter.some */ + some: function (iterable, func) { + var self = MochiKit.Iter; + try { + self.ifilter(func, iterable).next(); + return true; + } catch (e) { + if (e != self.StopIteration) { + throw e; + } + return false; + } + }, + + /** @id MochiKit.Iter.iextend */ + iextend: function (lst, iterable) { + var m = MochiKit.Base; + var self = MochiKit.Iter; + if (m.isArrayLike(iterable) && !self.isIterable(iterable)) { + // fast-path for array-like + for (var i = 0; i < iterable.length; i++) { + lst.push(iterable[i]); + } + } else { + iterable = self.iter(iterable); + try { + while (true) { + lst.push(iterable.next()); + } + } catch (e) { + if (e != self.StopIteration) { + throw e; + } + } + } + return lst; + }, + + /** @id MochiKit.Iter.groupby */ + groupby: function(iterable, /* optional */ keyfunc) { + var m = MochiKit.Base; + var self = MochiKit.Iter; + if (arguments.length < 2) { + keyfunc = m.operator.identity; + } + iterable = self.iter(iterable); + + // shared + var pk = undefined; + var k = undefined; + var v; + + function fetch() { + v = iterable.next(); + k = keyfunc(v); + }; + + function eat() { + var ret = v; + v = undefined; + return ret; + }; + + var first = true; + var compare = m.compare; + return { + repr: function () { return "groupby(...)"; }, + next: function() { + // iterator-next + + // iterate until meet next group + while (compare(k, pk) === 0) { + fetch(); + if (first) { + first = false; + break; + } + } + pk = k; + return [k, { + next: function() { + // subiterator-next + if (v == undefined) { // Is there something to eat? + fetch(); + } + if (compare(k, pk) !== 0) { + throw self.StopIteration; + } + return eat(); + } + }]; + } + }; + }, + + /** @id MochiKit.Iter.groupby_as_array */ + groupby_as_array: function (iterable, /* optional */ keyfunc) { + var m = MochiKit.Base; + var self = MochiKit.Iter; + if (arguments.length < 2) { + keyfunc = m.operator.identity; + } + + iterable = self.iter(iterable); + var result = []; + var first = true; + var prev_key; + var compare = m.compare; + while (true) { + try { + var value = iterable.next(); + var key = keyfunc(value); + } catch (e) { + if (e == self.StopIteration) { + break; + } + throw e; + } + if (first || compare(key, prev_key) !== 0) { + var values = []; + result.push([key, values]); + } + values.push(value); + first = false; + prev_key = key; + } + return result; + }, + + /** @id MochiKit.Iter.arrayLikeIter */ + arrayLikeIter: function (iterable) { + var i = 0; + return { + repr: function () { return "arrayLikeIter(...)"; }, + toString: MochiKit.Base.forwardCall("repr"), + next: function () { + if (i >= iterable.length) { + throw MochiKit.Iter.StopIteration; + } + return iterable[i++]; + } + }; + }, + + /** @id MochiKit.Iter.hasIterateNext */ + hasIterateNext: function (iterable) { + return (iterable && typeof(iterable.iterateNext) == "function"); + }, + + /** @id MochiKit.Iter.iterateNextIter */ + iterateNextIter: function (iterable) { + return { + repr: function () { return "iterateNextIter(...)"; }, + toString: MochiKit.Base.forwardCall("repr"), + next: function () { + var rval = iterable.iterateNext(); + if (rval === null || rval === undefined) { + throw MochiKit.Iter.StopIteration; + } + return rval; + } + }; + } +}); + + +MochiKit.Iter.EXPORT_OK = [ + "iteratorRegistry", + "arrayLikeIter", + "hasIterateNext", + "iterateNextIter" +]; + +MochiKit.Iter.EXPORT = [ + "StopIteration", + "registerIteratorFactory", + "iter", + "count", + "cycle", + "repeat", + "next", + "izip", + "ifilter", + "ifilterfalse", + "islice", + "imap", + "applymap", + "chain", + "takewhile", + "dropwhile", + "tee", + "list", + "reduce", + "range", + "sum", + "exhaust", + "forEach", + "every", + "sorted", + "reversed", + "some", + "iextend", + "groupby", + "groupby_as_array" +]; + +MochiKit.Iter.__new__ = function () { + var m = MochiKit.Base; + // Re-use StopIteration if exists (e.g. SpiderMonkey) + if (typeof(StopIteration) != "undefined") { + this.StopIteration = StopIteration; + } else { + /** @id MochiKit.Iter.StopIteration */ + this.StopIteration = new m.NamedError("StopIteration"); + } + this.iteratorRegistry = new m.AdapterRegistry(); + // Register the iterator factory for arrays + this.registerIteratorFactory( + "arrayLike", + m.isArrayLike, + this.arrayLikeIter + ); + + this.registerIteratorFactory( + "iterateNext", + this.hasIterateNext, + this.iterateNextIter + ); + + this.EXPORT_TAGS = { + ":common": this.EXPORT, + ":all": m.concat(this.EXPORT, this.EXPORT_OK) + }; + + m.nameFunctions(this); + +}; + +MochiKit.Iter.__new__(); + +// +// XXX: Internet Explorer blows +// +if (MochiKit.__export__) { + reduce = MochiKit.Iter.reduce; +} + +MochiKit.Base._exportSymbols(this, MochiKit.Iter); diff --git a/static/MochiKit/Logging.js b/static/MochiKit/Logging.js new file mode 100644 index 0000000..463ccd0 --- /dev/null +++ b/static/MochiKit/Logging.js @@ -0,0 +1,315 @@ +/*** + +MochiKit.Logging 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito. All rights Reserved. + +***/ + +MochiKit.Base._deps('Logging', ['Base']); + +MochiKit.Logging.NAME = "MochiKit.Logging"; +MochiKit.Logging.VERSION = "1.4.2"; +MochiKit.Logging.__repr__ = function () { + return "[" + this.NAME + " " + this.VERSION + "]"; +}; + +MochiKit.Logging.toString = function () { + return this.__repr__(); +}; + + +MochiKit.Logging.EXPORT = [ + "LogLevel", + "LogMessage", + "Logger", + "alertListener", + "logger", + "log", + "logError", + "logDebug", + "logFatal", + "logWarning" +]; + + +MochiKit.Logging.EXPORT_OK = [ + "logLevelAtLeast", + "isLogMessage", + "compareLogMessage" +]; + + +/** @id MochiKit.Logging.LogMessage */ +MochiKit.Logging.LogMessage = function (num, level, info) { + this.num = num; + this.level = level; + this.info = info; + this.timestamp = new Date(); +}; + +MochiKit.Logging.LogMessage.prototype = { + /** @id MochiKit.Logging.LogMessage.prototype.repr */ + repr: function () { + var m = MochiKit.Base; + return 'LogMessage(' + + m.map( + m.repr, + [this.num, this.level, this.info] + ).join(', ') + ')'; + }, + /** @id MochiKit.Logging.LogMessage.prototype.toString */ + toString: MochiKit.Base.forwardCall("repr") +}; + +MochiKit.Base.update(MochiKit.Logging, { + /** @id MochiKit.Logging.logLevelAtLeast */ + logLevelAtLeast: function (minLevel) { + var self = MochiKit.Logging; + if (typeof(minLevel) == 'string') { + minLevel = self.LogLevel[minLevel]; + } + return function (msg) { + var msgLevel = msg.level; + if (typeof(msgLevel) == 'string') { + msgLevel = self.LogLevel[msgLevel]; + } + return msgLevel >= minLevel; + }; + }, + + /** @id MochiKit.Logging.isLogMessage */ + isLogMessage: function (/* ... */) { + var LogMessage = MochiKit.Logging.LogMessage; + for (var i = 0; i < arguments.length; i++) { + if (!(arguments[i] instanceof LogMessage)) { + return false; + } + } + return true; + }, + + /** @id MochiKit.Logging.compareLogMessage */ + compareLogMessage: function (a, b) { + return MochiKit.Base.compare([a.level, a.info], [b.level, b.info]); + }, + + /** @id MochiKit.Logging.alertListener */ + alertListener: function (msg) { + alert( + "num: " + msg.num + + "\nlevel: " + msg.level + + "\ninfo: " + msg.info.join(" ") + ); + } + +}); + +/** @id MochiKit.Logging.Logger */ +MochiKit.Logging.Logger = function (/* optional */maxSize) { + this.counter = 0; + if (typeof(maxSize) == 'undefined' || maxSize === null) { + maxSize = -1; + } + this.maxSize = maxSize; + this._messages = []; + this.listeners = {}; + this.useNativeConsole = false; +}; + +MochiKit.Logging.Logger.prototype = { + /** @id MochiKit.Logging.Logger.prototype.clear */ + clear: function () { + this._messages.splice(0, this._messages.length); + }, + + /** @id MochiKit.Logging.Logger.prototype.logToConsole */ + logToConsole: function (msg) { + if (typeof(window) != "undefined" && window.console + && window.console.log) { + // Safari and FireBug 0.4 + // Percent replacement is a workaround for cute Safari crashing bug + window.console.log(msg.replace(/%/g, '\uFF05')); + } else if (typeof(opera) != "undefined" && opera.postError) { + // Opera + opera.postError(msg); + } else if (typeof(printfire) == "function") { + // FireBug 0.3 and earlier + printfire(msg); + } else if (typeof(Debug) != "undefined" && Debug.writeln) { + // IE Web Development Helper (?) + // http://www.nikhilk.net/Entry.aspx?id=93 + Debug.writeln(msg); + } else if (typeof(debug) != "undefined" && debug.trace) { + // Atlas framework (?) + // http://www.nikhilk.net/Entry.aspx?id=93 + debug.trace(msg); + } + }, + + /** @id MochiKit.Logging.Logger.prototype.dispatchListeners */ + dispatchListeners: function (msg) { + for (var k in this.listeners) { + var pair = this.listeners[k]; + if (pair.ident != k || (pair[0] && !pair[0](msg))) { + continue; + } + pair[1](msg); + } + }, + + /** @id MochiKit.Logging.Logger.prototype.addListener */ + addListener: function (ident, filter, listener) { + if (typeof(filter) == 'string') { + filter = MochiKit.Logging.logLevelAtLeast(filter); + } + var entry = [filter, listener]; + entry.ident = ident; + this.listeners[ident] = entry; + }, + + /** @id MochiKit.Logging.Logger.prototype.removeListener */ + removeListener: function (ident) { + delete this.listeners[ident]; + }, + + /** @id MochiKit.Logging.Logger.prototype.baseLog */ + baseLog: function (level, message/*, ...*/) { + if (typeof(level) == "number") { + if (level >= MochiKit.Logging.LogLevel.FATAL) { + level = 'FATAL'; + } else if (level >= MochiKit.Logging.LogLevel.ERROR) { + level = 'ERROR'; + } else if (level >= MochiKit.Logging.LogLevel.WARNING) { + level = 'WARNING'; + } else if (level >= MochiKit.Logging.LogLevel.INFO) { + level = 'INFO'; + } else { + level = 'DEBUG'; + } + } + var msg = new MochiKit.Logging.LogMessage( + this.counter, + level, + MochiKit.Base.extend(null, arguments, 1) + ); + this._messages.push(msg); + this.dispatchListeners(msg); + if (this.useNativeConsole) { + this.logToConsole(msg.level + ": " + msg.info.join(" ")); + } + this.counter += 1; + while (this.maxSize >= 0 && this._messages.length > this.maxSize) { + this._messages.shift(); + } + }, + + /** @id MochiKit.Logging.Logger.prototype.getMessages */ + getMessages: function (howMany) { + var firstMsg = 0; + if (!(typeof(howMany) == 'undefined' || howMany === null)) { + firstMsg = Math.max(0, this._messages.length - howMany); + } + return this._messages.slice(firstMsg); + }, + + /** @id MochiKit.Logging.Logger.prototype.getMessageText */ + getMessageText: function (howMany) { + if (typeof(howMany) == 'undefined' || howMany === null) { + howMany = 30; + } + var messages = this.getMessages(howMany); + if (messages.length) { + var lst = map(function (m) { + return '\n [' + m.num + '] ' + m.level + ': ' + m.info.join(' '); + }, messages); + lst.unshift('LAST ' + messages.length + ' MESSAGES:'); + return lst.join(''); + } + return ''; + }, + + /** @id MochiKit.Logging.Logger.prototype.debuggingBookmarklet */ + debuggingBookmarklet: function (inline) { + if (typeof(MochiKit.LoggingPane) == "undefined") { + alert(this.getMessageText()); + } else { + MochiKit.LoggingPane.createLoggingPane(inline || false); + } + } +}; + +MochiKit.Logging.__new__ = function () { + this.LogLevel = { + ERROR: 40, + FATAL: 50, + WARNING: 30, + INFO: 20, + DEBUG: 10 + }; + + var m = MochiKit.Base; + m.registerComparator("LogMessage", + this.isLogMessage, + this.compareLogMessage + ); + + var partial = m.partial; + + var Logger = this.Logger; + var baseLog = Logger.prototype.baseLog; + m.update(this.Logger.prototype, { + debug: partial(baseLog, 'DEBUG'), + log: partial(baseLog, 'INFO'), + error: partial(baseLog, 'ERROR'), + fatal: partial(baseLog, 'FATAL'), + warning: partial(baseLog, 'WARNING') + }); + + // indirectly find logger so it can be replaced + var self = this; + var connectLog = function (name) { + return function () { + self.logger[name].apply(self.logger, arguments); + }; + }; + + /** @id MochiKit.Logging.log */ + this.log = connectLog('log'); + /** @id MochiKit.Logging.logError */ + this.logError = connectLog('error'); + /** @id MochiKit.Logging.logDebug */ + this.logDebug = connectLog('debug'); + /** @id MochiKit.Logging.logFatal */ + this.logFatal = connectLog('fatal'); + /** @id MochiKit.Logging.logWarning */ + this.logWarning = connectLog('warning'); + this.logger = new Logger(); + this.logger.useNativeConsole = true; + + this.EXPORT_TAGS = { + ":common": this.EXPORT, + ":all": m.concat(this.EXPORT, this.EXPORT_OK) + }; + + m.nameFunctions(this); + +}; + +if (typeof(printfire) == "undefined" && + typeof(document) != "undefined" && document.createEvent && + typeof(dispatchEvent) != "undefined") { + // FireBug really should be less lame about this global function + printfire = function () { + printfire.args = arguments; + var ev = document.createEvent("Events"); + ev.initEvent("printfire", false, true); + dispatchEvent(ev); + }; +} + +MochiKit.Logging.__new__(); + +MochiKit.Base._exportSymbols(this, MochiKit.Logging); diff --git a/static/MochiKit/LoggingPane.js b/static/MochiKit/LoggingPane.js new file mode 100644 index 0000000..95c4fe5 --- /dev/null +++ b/static/MochiKit/LoggingPane.js @@ -0,0 +1,353 @@ +/*** + +MochiKit.LoggingPane 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito. All rights Reserved. + +***/ + +MochiKit.Base._deps('LoggingPane', ['Base', 'Logging']); + +MochiKit.LoggingPane.NAME = "MochiKit.LoggingPane"; +MochiKit.LoggingPane.VERSION = "1.4.2"; +MochiKit.LoggingPane.__repr__ = function () { + return "[" + this.NAME + " " + this.VERSION + "]"; +}; + +MochiKit.LoggingPane.toString = function () { + return this.__repr__(); +}; + +/** @id MochiKit.LoggingPane.createLoggingPane */ +MochiKit.LoggingPane.createLoggingPane = function (inline/* = false */) { + var m = MochiKit.LoggingPane; + inline = !(!inline); + if (m._loggingPane && m._loggingPane.inline != inline) { + m._loggingPane.closePane(); + m._loggingPane = null; + } + if (!m._loggingPane || m._loggingPane.closed) { + m._loggingPane = new m.LoggingPane(inline, MochiKit.Logging.logger); + } + return m._loggingPane; +}; + +/** @id MochiKit.LoggingPane.LoggingPane */ +MochiKit.LoggingPane.LoggingPane = function (inline/* = false */, logger/* = MochiKit.Logging.logger */) { + + /* Use a div if inline, pop up a window if not */ + /* Create the elements */ + if (typeof(logger) == "undefined" || logger === null) { + logger = MochiKit.Logging.logger; + } + this.logger = logger; + var update = MochiKit.Base.update; + var updatetree = MochiKit.Base.updatetree; + var bind = MochiKit.Base.bind; + var clone = MochiKit.Base.clone; + var win = window; + var uid = "_MochiKit_LoggingPane"; + if (typeof(MochiKit.DOM) != "undefined") { + win = MochiKit.DOM.currentWindow(); + } + if (!inline) { + // name the popup with the base URL for uniqueness + var url = win.location.href.split("?")[0].replace(/[#:\/.><&%-]/g, "_"); + var name = uid + "_" + url; + var nwin = win.open("", name, "dependent,resizable,height=200"); + if (!nwin) { + alert("Not able to open debugging window due to pop-up blocking."); + return undefined; + } + nwin.document.write( + '' + + '[MochiKit.LoggingPane]' + + '' + ); + nwin.document.close(); + nwin.document.title += ' ' + win.document.title; + win = nwin; + } + var doc = win.document; + this.doc = doc; + + // Connect to the debug pane if it already exists (i.e. in a window orphaned by the page being refreshed) + var debugPane = doc.getElementById(uid); + var existing_pane = !!debugPane; + if (debugPane && typeof(debugPane.loggingPane) != "undefined") { + debugPane.loggingPane.logger = this.logger; + debugPane.loggingPane.buildAndApplyFilter(); + return debugPane.loggingPane; + } + + if (existing_pane) { + // clear any existing contents + var child; + while ((child = debugPane.firstChild)) { + debugPane.removeChild(child); + } + } else { + debugPane = doc.createElement("div"); + debugPane.id = uid; + } + debugPane.loggingPane = this; + var levelFilterField = doc.createElement("input"); + var infoFilterField = doc.createElement("input"); + var filterButton = doc.createElement("button"); + var loadButton = doc.createElement("button"); + var clearButton = doc.createElement("button"); + var closeButton = doc.createElement("button"); + var logPaneArea = doc.createElement("div"); + var logPane = doc.createElement("div"); + + /* Set up the functions */ + var listenerId = uid + "_Listener"; + this.colorTable = clone(this.colorTable); + var messages = []; + var messageFilter = null; + + /** @id MochiKit.LoggingPane.messageLevel */ + var messageLevel = function (msg) { + var level = msg.level; + if (typeof(level) == "number") { + level = MochiKit.Logging.LogLevel[level]; + } + return level; + }; + + /** @id MochiKit.LoggingPane.messageText */ + var messageText = function (msg) { + return msg.info.join(" "); + }; + + /** @id MochiKit.LoggingPane.addMessageText */ + var addMessageText = bind(function (msg) { + var level = messageLevel(msg); + var text = messageText(msg); + var c = this.colorTable[level]; + var p = doc.createElement("span"); + p.className = "MochiKit-LogMessage MochiKit-LogLevel-" + level; + p.style.cssText = "margin: 0px; white-space: -moz-pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; white-space: pre-line; word-wrap: break-word; wrap-option: emergency; color: " + c; + p.appendChild(doc.createTextNode(level + ": " + text)); + logPane.appendChild(p); + logPane.appendChild(doc.createElement("br")); + if (logPaneArea.offsetHeight > logPaneArea.scrollHeight) { + logPaneArea.scrollTop = 0; + } else { + logPaneArea.scrollTop = logPaneArea.scrollHeight; + } + }, this); + + /** @id MochiKit.LoggingPane.addMessage */ + var addMessage = function (msg) { + messages[messages.length] = msg; + addMessageText(msg); + }; + + /** @id MochiKit.LoggingPane.buildMessageFilter */ + var buildMessageFilter = function () { + var levelre, infore; + try { + /* Catch any exceptions that might arise due to invalid regexes */ + levelre = new RegExp(levelFilterField.value); + infore = new RegExp(infoFilterField.value); + } catch(e) { + /* If there was an error with the regexes, do no filtering */ + logDebug("Error in filter regex: " + e.message); + return null; + } + + return function (msg) { + return ( + levelre.test(messageLevel(msg)) && + infore.test(messageText(msg)) + ); + }; + }; + + /** @id MochiKit.LoggingPane.clearMessagePane */ + var clearMessagePane = function () { + while (logPane.firstChild) { + logPane.removeChild(logPane.firstChild); + } + }; + + /** @id MochiKit.LoggingPane.clearMessages */ + var clearMessages = function () { + messages = []; + clearMessagePane(); + }; + + /** @id MochiKit.LoggingPane.closePane */ + var closePane = bind(function () { + if (this.closed) { + return; + } + this.closed = true; + if (MochiKit.LoggingPane._loggingPane == this) { + MochiKit.LoggingPane._loggingPane = null; + } + this.logger.removeListener(listenerId); + try { + try { + debugPane.loggingPane = null; + } catch(e) { logFatal("Bookmarklet was closed incorrectly."); } + if (inline) { + debugPane.parentNode.removeChild(debugPane); + } else { + this.win.close(); + } + } catch(e) {} + }, this); + + /** @id MochiKit.LoggingPane.filterMessages */ + var filterMessages = function () { + clearMessagePane(); + + for (var i = 0; i < messages.length; i++) { + var msg = messages[i]; + if (messageFilter === null || messageFilter(msg)) { + addMessageText(msg); + } + } + }; + + this.buildAndApplyFilter = function () { + messageFilter = buildMessageFilter(); + + filterMessages(); + + this.logger.removeListener(listenerId); + this.logger.addListener(listenerId, messageFilter, addMessage); + }; + + + /** @id MochiKit.LoggingPane.loadMessages */ + var loadMessages = bind(function () { + messages = this.logger.getMessages(); + filterMessages(); + }, this); + + /** @id MochiKit.LoggingPane.filterOnEnter */ + var filterOnEnter = bind(function (event) { + event = event || window.event; + key = event.which || event.keyCode; + if (key == 13) { + this.buildAndApplyFilter(); + } + }, this); + + /* Create the debug pane */ + var style = "display: block; z-index: 1000; left: 0px; bottom: 0px; position: fixed; width: 100%; background-color: white; font: " + this.logFont; + if (inline) { + style += "; height: 10em; border-top: 2px solid black"; + } else { + style += "; height: 100%;"; + } + debugPane.style.cssText = style; + + if (!existing_pane) { + doc.body.appendChild(debugPane); + } + + /* Create the filter fields */ + style = {"cssText": "width: 33%; display: inline; font: " + this.logFont}; + + updatetree(levelFilterField, { + "value": "FATAL|ERROR|WARNING|INFO|DEBUG", + "onkeypress": filterOnEnter, + "style": style + }); + debugPane.appendChild(levelFilterField); + + updatetree(infoFilterField, { + "value": ".*", + "onkeypress": filterOnEnter, + "style": style + }); + debugPane.appendChild(infoFilterField); + + /* Create the buttons */ + style = "width: 8%; display:inline; font: " + this.logFont; + + filterButton.appendChild(doc.createTextNode("Filter")); + filterButton.onclick = bind("buildAndApplyFilter", this); + filterButton.style.cssText = style; + debugPane.appendChild(filterButton); + + loadButton.appendChild(doc.createTextNode("Load")); + loadButton.onclick = loadMessages; + loadButton.style.cssText = style; + debugPane.appendChild(loadButton); + + clearButton.appendChild(doc.createTextNode("Clear")); + clearButton.onclick = clearMessages; + clearButton.style.cssText = style; + debugPane.appendChild(clearButton); + + closeButton.appendChild(doc.createTextNode("Close")); + closeButton.onclick = closePane; + closeButton.style.cssText = style; + debugPane.appendChild(closeButton); + + /* Create the logging pane */ + logPaneArea.style.cssText = "overflow: auto; width: 100%"; + logPane.style.cssText = "width: 100%; height: " + (inline ? "8em" : "100%"); + + logPaneArea.appendChild(logPane); + debugPane.appendChild(logPaneArea); + + this.buildAndApplyFilter(); + loadMessages(); + + if (inline) { + this.win = undefined; + } else { + this.win = win; + } + this.inline = inline; + this.closePane = closePane; + this.closed = false; + + + return this; +}; + +MochiKit.LoggingPane.LoggingPane.prototype = { + "logFont": "8pt Verdana,sans-serif", + "colorTable": { + "ERROR": "red", + "FATAL": "darkred", + "WARNING": "blue", + "INFO": "black", + "DEBUG": "green" + } +}; + + +MochiKit.LoggingPane.EXPORT_OK = [ + "LoggingPane" +]; + +MochiKit.LoggingPane.EXPORT = [ + "createLoggingPane" +]; + +MochiKit.LoggingPane.__new__ = function () { + this.EXPORT_TAGS = { + ":common": this.EXPORT, + ":all": MochiKit.Base.concat(this.EXPORT, this.EXPORT_OK) + }; + + MochiKit.Base.nameFunctions(this); + + MochiKit.LoggingPane._loggingPane = null; + +}; + +MochiKit.LoggingPane.__new__(); + +MochiKit.Base._exportSymbols(this, MochiKit.LoggingPane); diff --git a/static/MochiKit/MochiKit.js b/static/MochiKit/MochiKit.js new file mode 100644 index 0000000..1ec157e --- /dev/null +++ b/static/MochiKit/MochiKit.js @@ -0,0 +1,188 @@ +/*** + +MochiKit.MochiKit 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito. All rights Reserved. + +***/ + +if (typeof(MochiKit) == 'undefined') { + MochiKit = {}; +} + +if (typeof(MochiKit.MochiKit) == 'undefined') { + /** @id MochiKit.MochiKit */ + MochiKit.MochiKit = {}; +} + +MochiKit.MochiKit.NAME = "MochiKit.MochiKit"; +MochiKit.MochiKit.VERSION = "1.4.2"; +MochiKit.MochiKit.__repr__ = function () { + return "[" + this.NAME + " " + this.VERSION + "]"; +}; + +/** @id MochiKit.MochiKit.toString */ +MochiKit.MochiKit.toString = function () { + return this.__repr__(); +}; + +/** @id MochiKit.MochiKit.SUBMODULES */ +MochiKit.MochiKit.SUBMODULES = [ + "Base", + "Iter", + "Logging", + "DateTime", + "Format", + "Async", + "DOM", + "Selector", + "Style", + "LoggingPane", + "Color", + "Signal", + "Position", + "Visual", + "DragAndDrop", + "Sortable" +]; + +if (typeof(JSAN) != 'undefined' || typeof(dojo) != 'undefined') { + if (typeof(dojo) != 'undefined') { + dojo.provide('MochiKit.MochiKit'); + (function (lst) { + for (var i = 0; i < lst.length; i++) { + dojo.require("MochiKit." + lst[i]); + } + })(MochiKit.MochiKit.SUBMODULES); + } + if (typeof(JSAN) != 'undefined') { + (function (lst) { + for (var i = 0; i < lst.length; i++) { + JSAN.use("MochiKit." + lst[i], []); + } + })(MochiKit.MochiKit.SUBMODULES); + } + (function () { + var extend = MochiKit.Base.extend; + var self = MochiKit.MochiKit; + var modules = self.SUBMODULES; + var EXPORT = []; + var EXPORT_OK = []; + var EXPORT_TAGS = {}; + var i, k, m, all; + for (i = 0; i < modules.length; i++) { + m = MochiKit[modules[i]]; + extend(EXPORT, m.EXPORT); + extend(EXPORT_OK, m.EXPORT_OK); + for (k in m.EXPORT_TAGS) { + EXPORT_TAGS[k] = extend(EXPORT_TAGS[k], m.EXPORT_TAGS[k]); + } + all = m.EXPORT_TAGS[":all"]; + if (!all) { + all = extend(null, m.EXPORT, m.EXPORT_OK); + } + var j; + for (j = 0; j < all.length; j++) { + k = all[j]; + self[k] = m[k]; + } + } + self.EXPORT = EXPORT; + self.EXPORT_OK = EXPORT_OK; + self.EXPORT_TAGS = EXPORT_TAGS; + }()); + +} else { + if (typeof(MochiKit.__compat__) == 'undefined') { + MochiKit.__compat__ = true; + } + (function () { + if (typeof(document) == "undefined") { + return; + } + var scripts = document.getElementsByTagName("script"); + var kXHTMLNSURI = "http://www.w3.org/1999/xhtml"; + var kSVGNSURI = "http://www.w3.org/2000/svg"; + var kXLINKNSURI = "http://www.w3.org/1999/xlink"; + var kXULNSURI = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + var base = null; + var baseElem = null; + var allScripts = {}; + var i; + var src; + for (i = 0; i < scripts.length; i++) { + src = null; + switch (scripts[i].namespaceURI) { + case kSVGNSURI: + src = scripts[i].getAttributeNS(kXLINKNSURI, "href"); + break; + /* + case null: // HTML + case '': // HTML + case kXHTMLNSURI: + case kXULNSURI: + */ + default: + src = scripts[i].getAttribute("src"); + break; + } + if (!src) { + continue; + } + allScripts[src] = true; + if (src.match(/MochiKit.js(\?.*)?$/)) { + base = src.substring(0, src.lastIndexOf('MochiKit.js')); + baseElem = scripts[i]; + } + } + if (base === null) { + return; + } + var modules = MochiKit.MochiKit.SUBMODULES; + for (var i = 0; i < modules.length; i++) { + if (MochiKit[modules[i]]) { + continue; + } + var uri = base + modules[i] + '.js'; + if (uri in allScripts) { + continue; + } + if (baseElem.namespaceURI == kSVGNSURI || + baseElem.namespaceURI == kXULNSURI) { + // SVG, XUL + /* + SVG does not support document.write, so if Safari wants to + support SVG tests it should fix its deferred loading bug + (see following below). + + */ + var s = document.createElementNS(baseElem.namespaceURI, 'script'); + s.setAttribute("id", "MochiKit_" + base + modules[i]); + if (baseElem.namespaceURI == kSVGNSURI) { + s.setAttributeNS(kXLINKNSURI, 'href', uri); + } else { + s.setAttribute('src', uri); + } + s.setAttribute("type", "application/x-javascript"); + baseElem.parentNode.appendChild(s); + } else { + // HTML, XHTML + /* + DOM can not be used here because Safari does + deferred loading of scripts unless they are + in the document or inserted with document.write + + This is not XHTML compliant. If you want XHTML + compliance then you must use the packed version of MochiKit + or include each script individually (basically unroll + these document.write calls into your XHTML source) + + */ + document.write('<' + baseElem.nodeName + ' src="' + uri + + '" type="text/javascript">'); + } + }; + })(); +} diff --git a/static/MochiKit/MockDOM.js b/static/MochiKit/MockDOM.js new file mode 100644 index 0000000..250d12e --- /dev/null +++ b/static/MochiKit/MockDOM.js @@ -0,0 +1,115 @@ +/*** + +MochiKit.MockDOM 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito. All rights Reserved. + +***/ + +if (typeof(MochiKit) == "undefined") { + MochiKit = {}; +} + +if (typeof(MochiKit.MockDOM) == "undefined") { + MochiKit.MockDOM = {}; +} + +MochiKit.MockDOM.NAME = "MochiKit.MockDOM"; +MochiKit.MockDOM.VERSION = "1.4.2"; + +MochiKit.MockDOM.__repr__ = function () { + return "[" + this.NAME + " " + this.VERSION + "]"; +}; + +/** @id MochiKit.MockDOM.toString */ +MochiKit.MockDOM.toString = function () { + return this.__repr__(); +}; + +/** @id MochiKit.MockDOM.createDocument */ +MochiKit.MockDOM.createDocument = function () { + var doc = new MochiKit.MockDOM.MockElement("DOCUMENT"); + doc.body = doc.createElement("BODY"); + doc.appendChild(doc.body); + return doc; +}; + +/** @id MochiKit.MockDOM.MockElement */ +MochiKit.MockDOM.MockElement = function (name, data, ownerDocument) { + this.tagName = this.nodeName = name.toUpperCase(); + this.ownerDocument = ownerDocument || null; + if (name == "DOCUMENT") { + this.nodeType = 9; + this.childNodes = []; + } else if (typeof(data) == "string") { + this.nodeValue = data; + this.nodeType = 3; + } else { + this.nodeType = 1; + this.childNodes = []; + } + if (name.substring(0, 1) == "<") { + var nameattr = name.substring( + name.indexOf('"') + 1, name.lastIndexOf('"')); + name = name.substring(1, name.indexOf(" ")); + this.tagName = this.nodeName = name.toUpperCase(); + this.setAttribute("name", nameattr); + } +}; + +MochiKit.MockDOM.MockElement.prototype = { + /** @id MochiKit.MockDOM.MockElement.prototype.createElement */ + createElement: function (tagName) { + return new MochiKit.MockDOM.MockElement(tagName, null, this.nodeType == 9 ? this : this.ownerDocument); + }, + /** @id MochiKit.MockDOM.MockElement.prototype.createTextNode */ + createTextNode: function (text) { + return new MochiKit.MockDOM.MockElement("text", text, this.nodeType == 9 ? this : this.ownerDocument); + }, + /** @id MochiKit.MockDOM.MockElement.prototype.setAttribute */ + setAttribute: function (name, value) { + this[name] = value; + }, + /** @id MochiKit.MockDOM.MockElement.prototype.getAttribute */ + getAttribute: function (name) { + return this[name]; + }, + /** @id MochiKit.MockDOM.MockElement.prototype.appendChild */ + appendChild: function (child) { + this.childNodes.push(child); + }, + /** @id MochiKit.MockDOM.MockElement.prototype.toString */ + toString: function () { + return "MockElement(" + this.tagName + ")"; + }, + /** @id MochiKit.MockDOM.MockElement.prototype.getElementsByTagName */ + getElementsByTagName: function (tagName) { + var foundElements = []; + MochiKit.Base.nodeWalk(this, function(node){ + if (tagName == '*' || tagName == node.tagName) { + foundElements.push(node); + return node.childNodes; + } + }); + return foundElements; + } +}; + + /** @id MochiKit.MockDOM.EXPORT_OK */ +MochiKit.MockDOM.EXPORT_OK = [ + "mockElement", + "createDocument" +]; + + /** @id MochiKit.MockDOM.EXPORT */ +MochiKit.MockDOM.EXPORT = [ + "document" +]; + +MochiKit.MockDOM.__new__ = function () { + this.document = this.createDocument(); +}; + +MochiKit.MockDOM.__new__(); diff --git a/static/MochiKit/Position.js b/static/MochiKit/Position.js new file mode 100644 index 0000000..70288c7 --- /dev/null +++ b/static/MochiKit/Position.js @@ -0,0 +1,236 @@ +/*** + +MochiKit.Position 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005-2006 Bob Ippolito and others. All rights Reserved. + +***/ + +MochiKit.Base._deps('Position', ['Base', 'DOM', 'Style']); + +MochiKit.Position.NAME = 'MochiKit.Position'; +MochiKit.Position.VERSION = '1.4.2'; +MochiKit.Position.__repr__ = function () { + return '[' + this.NAME + ' ' + this.VERSION + ']'; +}; +MochiKit.Position.toString = function () { + return this.__repr__(); +}; + +MochiKit.Position.EXPORT_OK = []; + +MochiKit.Position.EXPORT = [ +]; + + +MochiKit.Base.update(MochiKit.Position, { + // set to true if needed, warning: firefox performance problems + // NOT neeeded for page scrolling, only if draggable contained in + // scrollable elements + includeScrollOffsets: false, + + /** @id MochiKit.Position.prepare */ + prepare: function () { + var deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + var deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + this.windowOffset = new MochiKit.Style.Coordinates(deltaX, deltaY); + }, + + /** @id MochiKit.Position.cumulativeOffset */ + cumulativeOffset: function (element) { + var valueT = 0; + var valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + return new MochiKit.Style.Coordinates(valueL, valueT); + }, + + /** @id MochiKit.Position.realOffset */ + realOffset: function (element) { + var valueT = 0; + var valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return new MochiKit.Style.Coordinates(valueL, valueT); + }, + + /** @id MochiKit.Position.within */ + within: function (element, x, y) { + if (this.includeScrollOffsets) { + return this.withinIncludingScrolloffsets(element, x, y); + } + this.xcomp = x; + this.ycomp = y; + this.offset = this.cumulativeOffset(element); + if (element.style.position == "fixed") { + this.offset.x += this.windowOffset.x; + this.offset.y += this.windowOffset.y; + } + + return (y >= this.offset.y && + y < this.offset.y + element.offsetHeight && + x >= this.offset.x && + x < this.offset.x + element.offsetWidth); + }, + + /** @id MochiKit.Position.withinIncludingScrolloffsets */ + withinIncludingScrolloffsets: function (element, x, y) { + var offsetcache = this.realOffset(element); + + this.xcomp = x + offsetcache.x - this.windowOffset.x; + this.ycomp = y + offsetcache.y - this.windowOffset.y; + this.offset = this.cumulativeOffset(element); + + return (this.ycomp >= this.offset.y && + this.ycomp < this.offset.y + element.offsetHeight && + this.xcomp >= this.offset.x && + this.xcomp < this.offset.x + element.offsetWidth); + }, + + // within must be called directly before + /** @id MochiKit.Position.overlap */ + overlap: function (mode, element) { + if (!mode) { + return 0; + } + if (mode == 'vertical') { + return ((this.offset.y + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + } + if (mode == 'horizontal') { + return ((this.offset.x + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + } + }, + + /** @id MochiKit.Position.absolutize */ + absolutize: function (element) { + element = MochiKit.DOM.getElement(element); + if (element.style.position == 'absolute') { + return; + } + MochiKit.Position.prepare(); + + var offsets = MochiKit.Position.positionedOffset(element); + var width = element.clientWidth; + var height = element.clientHeight; + + var oldStyle = { + 'position': element.style.position, + 'left': offsets.x - parseFloat(element.style.left || 0), + 'top': offsets.y - parseFloat(element.style.top || 0), + 'width': element.style.width, + 'height': element.style.height + }; + + element.style.position = 'absolute'; + element.style.top = offsets.y + 'px'; + element.style.left = offsets.x + 'px'; + element.style.width = width + 'px'; + element.style.height = height + 'px'; + + return oldStyle; + }, + + /** @id MochiKit.Position.positionedOffset */ + positionedOffset: function (element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + p = MochiKit.Style.getStyle(element, 'position'); + if (p == 'relative' || p == 'absolute') { + break; + } + } + } while (element); + return new MochiKit.Style.Coordinates(valueL, valueT); + }, + + /** @id MochiKit.Position.relativize */ + relativize: function (element, oldPos) { + element = MochiKit.DOM.getElement(element); + if (element.style.position == 'relative') { + return; + } + MochiKit.Position.prepare(); + + var top = parseFloat(element.style.top || 0) - + (oldPos['top'] || 0); + var left = parseFloat(element.style.left || 0) - + (oldPos['left'] || 0); + + element.style.position = oldPos['position']; + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.width = oldPos['width']; + element.style.height = oldPos['height']; + }, + + /** @id MochiKit.Position.clone */ + clone: function (source, target) { + source = MochiKit.DOM.getElement(source); + target = MochiKit.DOM.getElement(target); + target.style.position = 'absolute'; + var offsets = this.cumulativeOffset(source); + target.style.top = offsets.y + 'px'; + target.style.left = offsets.x + 'px'; + target.style.width = source.offsetWidth + 'px'; + target.style.height = source.offsetHeight + 'px'; + }, + + /** @id MochiKit.Position.page */ + page: function (forElement) { + var valueT = 0; + var valueL = 0; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + + // Safari fix + if (element.offsetParent == document.body && MochiKit.Style.getStyle(element, 'position') == 'absolute') { + break; + } + } while (element = element.offsetParent); + + element = forElement; + do { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } while (element = element.parentNode); + + return new MochiKit.Style.Coordinates(valueL, valueT); + } +}); + +MochiKit.Position.__new__ = function (win) { + var m = MochiKit.Base; + this.EXPORT_TAGS = { + ':common': this.EXPORT, + ':all': m.concat(this.EXPORT, this.EXPORT_OK) + }; + + m.nameFunctions(this); +}; + +MochiKit.Position.__new__(this); + +MochiKit.Base._exportSymbols(this, MochiKit.Position); \ No newline at end of file diff --git a/static/MochiKit/Selector.js b/static/MochiKit/Selector.js new file mode 100644 index 0000000..fe96533 --- /dev/null +++ b/static/MochiKit/Selector.js @@ -0,0 +1,415 @@ +/*** + +MochiKit.Selector 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito and others. All rights Reserved. + +***/ + +MochiKit.Base._deps('Selector', ['Base', 'DOM', 'Iter']); + +MochiKit.Selector.NAME = "MochiKit.Selector"; +MochiKit.Selector.VERSION = "1.4.2"; + +MochiKit.Selector.__repr__ = function () { + return "[" + this.NAME + " " + this.VERSION + "]"; +}; + +MochiKit.Selector.toString = function () { + return this.__repr__(); +}; + +MochiKit.Selector.EXPORT = [ + "Selector", + "findChildElements", + "findDocElements", + "$$" +]; + +MochiKit.Selector.EXPORT_OK = [ +]; + +MochiKit.Selector.Selector = function (expression) { + this.params = {classNames: [], pseudoClassNames: []}; + this.expression = expression.toString().replace(/(^\s+|\s+$)/g, ''); + this.parseExpression(); + this.compileMatcher(); +}; + +MochiKit.Selector.Selector.prototype = { + /*** + + Selector class: convenient object to make CSS selections. + + ***/ + __class__: MochiKit.Selector.Selector, + + /** @id MochiKit.Selector.Selector.prototype.parseExpression */ + parseExpression: function () { + function abort(message) { + throw 'Parse error in selector: ' + message; + } + + if (this.expression == '') { + abort('empty expression'); + } + + var repr = MochiKit.Base.repr; + var params = this.params; + var expr = this.expression; + var match, modifier, clause, rest; + while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!^$*]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) { + params.attributes = params.attributes || []; + params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''}); + expr = match[1]; + } + + if (expr == '*') { + return this.params.wildcard = true; + } + + while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+(?:\([^)]*\))?)(.*)/i)) { + modifier = match[1]; + clause = match[2]; + rest = match[3]; + switch (modifier) { + case '#': + params.id = clause; + break; + case '.': + params.classNames.push(clause); + break; + case ':': + params.pseudoClassNames.push(clause); + break; + case '': + case undefined: + params.tagName = clause.toUpperCase(); + break; + default: + abort(repr(expr)); + } + expr = rest; + } + + if (expr.length > 0) { + abort(repr(expr)); + } + }, + + /** @id MochiKit.Selector.Selector.prototype.buildMatchExpression */ + buildMatchExpression: function () { + var repr = MochiKit.Base.repr; + var params = this.params; + var conditions = []; + var clause, i; + + function childElements(element) { + return "MochiKit.Base.filter(function (node) { return node.nodeType == 1; }, " + element + ".childNodes)"; + } + + if (params.wildcard) { + conditions.push('true'); + } + if (clause = params.id) { + conditions.push('element.id == ' + repr(clause)); + } + if (clause = params.tagName) { + conditions.push('element.tagName.toUpperCase() == ' + repr(clause)); + } + if ((clause = params.classNames).length > 0) { + for (i = 0; i < clause.length; i++) { + conditions.push('MochiKit.DOM.hasElementClass(element, ' + repr(clause[i]) + ')'); + } + } + if ((clause = params.pseudoClassNames).length > 0) { + for (i = 0; i < clause.length; i++) { + var match = clause[i].match(/^([^(]+)(?:\((.*)\))?$/); + var pseudoClass = match[1]; + var pseudoClassArgument = match[2]; + switch (pseudoClass) { + case 'root': + conditions.push('element.nodeType == 9 || element === element.ownerDocument.documentElement'); break; + case 'nth-child': + case 'nth-last-child': + case 'nth-of-type': + case 'nth-last-of-type': + match = pseudoClassArgument.match(/^((?:(\d+)n\+)?(\d+)|odd|even)$/); + if (!match) { + throw "Invalid argument to pseudo element nth-child: " + pseudoClassArgument; + } + var a, b; + if (match[0] == 'odd') { + a = 2; + b = 1; + } else if (match[0] == 'even') { + a = 2; + b = 0; + } else { + a = match[2] && parseInt(match) || null; + b = parseInt(match[3]); + } + conditions.push('this.nthChild(element,' + a + ',' + b + + ',' + !!pseudoClass.match('^nth-last') // Reverse + + ',' + !!pseudoClass.match('of-type$') // Restrict to same tagName + + ')'); + break; + case 'first-child': + conditions.push('this.nthChild(element, null, 1)'); + break; + case 'last-child': + conditions.push('this.nthChild(element, null, 1, true)'); + break; + case 'first-of-type': + conditions.push('this.nthChild(element, null, 1, false, true)'); + break; + case 'last-of-type': + conditions.push('this.nthChild(element, null, 1, true, true)'); + break; + case 'only-child': + conditions.push(childElements('element.parentNode') + '.length == 1'); + break; + case 'only-of-type': + conditions.push('MochiKit.Base.filter(function (node) { return node.tagName == element.tagName; }, ' + childElements('element.parentNode') + ').length == 1'); + break; + case 'empty': + conditions.push('element.childNodes.length == 0'); + break; + case 'enabled': + conditions.push('(this.isUIElement(element) && element.disabled === false)'); + break; + case 'disabled': + conditions.push('(this.isUIElement(element) && element.disabled === true)'); + break; + case 'checked': + conditions.push('(this.isUIElement(element) && element.checked === true)'); + break; + case 'not': + var subselector = new MochiKit.Selector.Selector(pseudoClassArgument); + conditions.push('!( ' + subselector.buildMatchExpression() + ')') + break; + } + } + } + if (clause = params.attributes) { + MochiKit.Base.map(function (attribute) { + var value = 'MochiKit.DOM.getNodeAttribute(element, ' + repr(attribute.name) + ')'; + var splitValueBy = function (delimiter) { + return value + '.split(' + repr(delimiter) + ')'; + } + conditions.push(value + ' != null'); + switch (attribute.operator) { + case '=': + conditions.push(value + ' == ' + repr(attribute.value)); + break; + case '~=': + conditions.push('MochiKit.Base.findValue(' + splitValueBy(' ') + ', ' + repr(attribute.value) + ') > -1'); + break; + case '^=': + conditions.push(value + '.substring(0, ' + attribute.value.length + ') == ' + repr(attribute.value)); + break; + case '$=': + conditions.push(value + '.substring(' + value + '.length - ' + attribute.value.length + ') == ' + repr(attribute.value)); + break; + case '*=': + conditions.push(value + '.match(' + repr(attribute.value) + ')'); + break; + case '|=': + conditions.push(splitValueBy('-') + '[0].toUpperCase() == ' + repr(attribute.value.toUpperCase())); + break; + case '!=': + conditions.push(value + ' != ' + repr(attribute.value)); + break; + case '': + case undefined: + // Condition already added above + break; + default: + throw 'Unknown operator ' + attribute.operator + ' in selector'; + } + }, clause); + } + + return conditions.join(' && '); + }, + + /** @id MochiKit.Selector.Selector.prototype.compileMatcher */ + compileMatcher: function () { + var code = 'return (!element.tagName) ? false : ' + + this.buildMatchExpression() + ';'; + this.match = new Function('element', code); + }, + + /** @id MochiKit.Selector.Selector.prototype.nthChild */ + nthChild: function (element, a, b, reverse, sametag){ + var siblings = MochiKit.Base.filter(function (node) { + return node.nodeType == 1; + }, element.parentNode.childNodes); + if (sametag) { + siblings = MochiKit.Base.filter(function (node) { + return node.tagName == element.tagName; + }, siblings); + } + if (reverse) { + siblings = MochiKit.Iter.reversed(siblings); + } + if (a) { + var actualIndex = MochiKit.Base.findIdentical(siblings, element); + return ((actualIndex + 1 - b) / a) % 1 == 0; + } else { + return b == MochiKit.Base.findIdentical(siblings, element) + 1; + } + }, + + /** @id MochiKit.Selector.Selector.prototype.isUIElement */ + isUIElement: function (element) { + return MochiKit.Base.findValue(['input', 'button', 'select', 'option', 'textarea', 'object'], + element.tagName.toLowerCase()) > -1; + }, + + /** @id MochiKit.Selector.Selector.prototype.findElements */ + findElements: function (scope, axis) { + var element; + + if (axis == undefined) { + axis = ""; + } + + function inScope(element, scope) { + if (axis == "") { + return MochiKit.DOM.isChildNode(element, scope); + } else if (axis == ">") { + return element.parentNode === scope; + } else if (axis == "+") { + return element === nextSiblingElement(scope); + } else if (axis == "~") { + var sibling = scope; + while (sibling = nextSiblingElement(sibling)) { + if (element === sibling) { + return true; + } + } + return false; + } else { + throw "Invalid axis: " + axis; + } + } + + if (element = MochiKit.DOM.getElement(this.params.id)) { + if (this.match(element)) { + if (!scope || inScope(element, scope)) { + return [element]; + } + } + } + + function nextSiblingElement(node) { + node = node.nextSibling; + while (node && node.nodeType != 1) { + node = node.nextSibling; + } + return node; + } + + if (axis == "") { + scope = (scope || MochiKit.DOM.currentDocument()).getElementsByTagName(this.params.tagName || '*'); + } else if (axis == ">") { + if (!scope) { + throw "> combinator not allowed without preceeding expression"; + } + scope = MochiKit.Base.filter(function (node) { + return node.nodeType == 1; + }, scope.childNodes); + } else if (axis == "+") { + if (!scope) { + throw "+ combinator not allowed without preceeding expression"; + } + scope = nextSiblingElement(scope) && [nextSiblingElement(scope)]; + } else if (axis == "~") { + if (!scope) { + throw "~ combinator not allowed without preceeding expression"; + } + var newscope = []; + while (nextSiblingElement(scope)) { + scope = nextSiblingElement(scope); + newscope.push(scope); + } + scope = newscope; + } + + if (!scope) { + return []; + } + + var results = MochiKit.Base.filter(MochiKit.Base.bind(function (scopeElt) { + return this.match(scopeElt); + }, this), scope); + + return results; + }, + + /** @id MochiKit.Selector.Selector.prototype.repr */ + repr: function () { + return 'Selector(' + this.expression + ')'; + }, + + toString: MochiKit.Base.forwardCall("repr") +}; + +MochiKit.Base.update(MochiKit.Selector, { + + /** @id MochiKit.Selector.findChildElements */ + findChildElements: function (element, expressions) { + var uniq = function(arr) { + var res = []; + for (var i = 0; i < arr.length; i++) { + if (MochiKit.Base.findIdentical(res, arr[i]) < 0) { + res.push(arr[i]); + } + } + return res; + }; + return MochiKit.Base.flattenArray(MochiKit.Base.map(function (expression) { + var nextScope = ""; + var reducer = function (results, expr) { + if (match = expr.match(/^[>+~]$/)) { + nextScope = match[0]; + return results; + } else { + var selector = new MochiKit.Selector.Selector(expr); + var elements = MochiKit.Iter.reduce(function (elements, result) { + return MochiKit.Base.extend(elements, selector.findElements(result || element, nextScope)); + }, results, []); + nextScope = ""; + return elements; + } + }; + var exprs = expression.replace(/(^\s+|\s+$)/g, '').split(/\s+/); + return uniq(MochiKit.Iter.reduce(reducer, exprs, [null])); + }, expressions)); + }, + + findDocElements: function () { + return MochiKit.Selector.findChildElements(MochiKit.DOM.currentDocument(), arguments); + }, + + __new__: function () { + var m = MochiKit.Base; + + this.$$ = this.findDocElements; + + this.EXPORT_TAGS = { + ":common": this.EXPORT, + ":all": m.concat(this.EXPORT, this.EXPORT_OK) + }; + + m.nameFunctions(this); + } +}); + +MochiKit.Selector.__new__(); + +MochiKit.Base._exportSymbols(this, MochiKit.Selector); + diff --git a/static/MochiKit/Signal.js b/static/MochiKit/Signal.js new file mode 100644 index 0000000..d49513c --- /dev/null +++ b/static/MochiKit/Signal.js @@ -0,0 +1,897 @@ +/*** + +MochiKit.Signal 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2006 Jonathan Gardner, Beau Hartshorne, Bob Ippolito. All rights Reserved. + +***/ + +MochiKit.Base._deps('Signal', ['Base', 'DOM', 'Style']); + +MochiKit.Signal.NAME = 'MochiKit.Signal'; +MochiKit.Signal.VERSION = '1.4.2'; + +MochiKit.Signal._observers = []; + +/** @id MochiKit.Signal.Event */ +MochiKit.Signal.Event = function (src, e) { + this._event = e || window.event; + this._src = src; +}; + +MochiKit.Base.update(MochiKit.Signal.Event.prototype, { + + __repr__: function () { + var repr = MochiKit.Base.repr; + var str = '{event(): ' + repr(this.event()) + + ', src(): ' + repr(this.src()) + + ', type(): ' + repr(this.type()) + + ', target(): ' + repr(this.target()); + + if (this.type() && + this.type().indexOf('key') === 0 || + this.type().indexOf('mouse') === 0 || + this.type().indexOf('click') != -1 || + this.type() == 'contextmenu') { + str += ', modifier(): ' + '{alt: ' + repr(this.modifier().alt) + + ', ctrl: ' + repr(this.modifier().ctrl) + + ', meta: ' + repr(this.modifier().meta) + + ', shift: ' + repr(this.modifier().shift) + + ', any: ' + repr(this.modifier().any) + '}'; + } + + if (this.type() && this.type().indexOf('key') === 0) { + str += ', key(): {code: ' + repr(this.key().code) + + ', string: ' + repr(this.key().string) + '}'; + } + + if (this.type() && ( + this.type().indexOf('mouse') === 0 || + this.type().indexOf('click') != -1 || + this.type() == 'contextmenu')) { + + str += ', mouse(): {page: ' + repr(this.mouse().page) + + ', client: ' + repr(this.mouse().client); + + if (this.type() != 'mousemove' && this.type() != 'mousewheel') { + str += ', button: {left: ' + repr(this.mouse().button.left) + + ', middle: ' + repr(this.mouse().button.middle) + + ', right: ' + repr(this.mouse().button.right) + '}'; + } + if (this.type() == 'mousewheel') { + str += ', wheel: ' + repr(this.mouse().wheel); + } + str += '}'; + } + if (this.type() == 'mouseover' || this.type() == 'mouseout' || + this.type() == 'mouseenter' || this.type() == 'mouseleave') { + str += ', relatedTarget(): ' + repr(this.relatedTarget()); + } + str += '}'; + return str; + }, + + /** @id MochiKit.Signal.Event.prototype.toString */ + toString: function () { + return this.__repr__(); + }, + + /** @id MochiKit.Signal.Event.prototype.src */ + src: function () { + return this._src; + }, + + /** @id MochiKit.Signal.Event.prototype.event */ + event: function () { + return this._event; + }, + + /** @id MochiKit.Signal.Event.prototype.type */ + type: function () { + if (this._event.type === "DOMMouseScroll") { + return "mousewheel"; + } else { + return this._event.type || undefined; + } + }, + + /** @id MochiKit.Signal.Event.prototype.target */ + target: function () { + return this._event.target || this._event.srcElement; + }, + + _relatedTarget: null, + /** @id MochiKit.Signal.Event.prototype.relatedTarget */ + relatedTarget: function () { + if (this._relatedTarget !== null) { + return this._relatedTarget; + } + + var elem = null; + if (this.type() == 'mouseover' || this.type() == 'mouseenter') { + elem = (this._event.relatedTarget || + this._event.fromElement); + } else if (this.type() == 'mouseout' || this.type() == 'mouseleave') { + elem = (this._event.relatedTarget || + this._event.toElement); + } + try { + if (elem !== null && elem.nodeType !== null) { + this._relatedTarget = elem; + return elem; + } + } catch (ignore) { + // Firefox 3 throws a permission denied error when accessing + // any property on XUL elements (e.g. scrollbars)... + } + + return undefined; + }, + + _modifier: null, + /** @id MochiKit.Signal.Event.prototype.modifier */ + modifier: function () { + if (this._modifier !== null) { + return this._modifier; + } + var m = {}; + m.alt = this._event.altKey; + m.ctrl = this._event.ctrlKey; + m.meta = this._event.metaKey || false; // IE and Opera punt here + m.shift = this._event.shiftKey; + m.any = m.alt || m.ctrl || m.shift || m.meta; + this._modifier = m; + return m; + }, + + _key: null, + /** @id MochiKit.Signal.Event.prototype.key */ + key: function () { + if (this._key !== null) { + return this._key; + } + var k = {}; + if (this.type() && this.type().indexOf('key') === 0) { + + /* + + If you're looking for a special key, look for it in keydown or + keyup, but never keypress. If you're looking for a Unicode + chracter, look for it with keypress, but never keyup or + keydown. + + Notes: + + FF key event behavior: + key event charCode keyCode + DOWN ku,kd 0 40 + DOWN kp 0 40 + ESC ku,kd 0 27 + ESC kp 0 27 + a ku,kd 0 65 + a kp 97 0 + shift+a ku,kd 0 65 + shift+a kp 65 0 + 1 ku,kd 0 49 + 1 kp 49 0 + shift+1 ku,kd 0 0 + shift+1 kp 33 0 + + IE key event behavior: + (IE doesn't fire keypress events for special keys.) + key event keyCode + DOWN ku,kd 40 + DOWN kp undefined + ESC ku,kd 27 + ESC kp 27 + a ku,kd 65 + a kp 97 + shift+a ku,kd 65 + shift+a kp 65 + 1 ku,kd 49 + 1 kp 49 + shift+1 ku,kd 49 + shift+1 kp 33 + + Safari key event behavior: + (Safari sets charCode and keyCode to something crazy for + special keys.) + key event charCode keyCode + DOWN ku,kd 63233 40 + DOWN kp 63233 63233 + ESC ku,kd 27 27 + ESC kp 27 27 + a ku,kd 97 65 + a kp 97 97 + shift+a ku,kd 65 65 + shift+a kp 65 65 + 1 ku,kd 49 49 + 1 kp 49 49 + shift+1 ku,kd 33 49 + shift+1 kp 33 33 + + */ + + /* look for special keys here */ + if (this.type() == 'keydown' || this.type() == 'keyup') { + k.code = this._event.keyCode; + k.string = (MochiKit.Signal._specialKeys[k.code] || + 'KEY_UNKNOWN'); + this._key = k; + return k; + + /* look for characters here */ + } else if (this.type() == 'keypress') { + + /* + + Special key behavior: + + IE: does not fire keypress events for special keys + FF: sets charCode to 0, and sets the correct keyCode + Safari: sets keyCode and charCode to something stupid + + */ + + k.code = 0; + k.string = ''; + + if (typeof(this._event.charCode) != 'undefined' && + this._event.charCode !== 0 && + !MochiKit.Signal._specialMacKeys[this._event.charCode]) { + k.code = this._event.charCode; + k.string = String.fromCharCode(k.code); + } else if (this._event.keyCode && + typeof(this._event.charCode) == 'undefined') { // IE + k.code = this._event.keyCode; + k.string = String.fromCharCode(k.code); + } + + this._key = k; + return k; + } + } + return undefined; + }, + + _mouse: null, + /** @id MochiKit.Signal.Event.prototype.mouse */ + mouse: function () { + if (this._mouse !== null) { + return this._mouse; + } + + var m = {}; + var e = this._event; + + if (this.type() && ( + this.type().indexOf('mouse') === 0 || + this.type().indexOf('click') != -1 || + this.type() == 'contextmenu')) { + + m.client = new MochiKit.Style.Coordinates(0, 0); + if (e.clientX || e.clientY) { + m.client.x = (!e.clientX || e.clientX < 0) ? 0 : e.clientX; + m.client.y = (!e.clientY || e.clientY < 0) ? 0 : e.clientY; + } + + m.page = new MochiKit.Style.Coordinates(0, 0); + if (e.pageX || e.pageY) { + m.page.x = (!e.pageX || e.pageX < 0) ? 0 : e.pageX; + m.page.y = (!e.pageY || e.pageY < 0) ? 0 : e.pageY; + } else { + /* + + The IE shortcut can be off by two. We fix it. See: + http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/getboundingclientrect.asp + + This is similar to the method used in + MochiKit.Style.getElementPosition(). + + */ + var de = MochiKit.DOM._document.documentElement; + var b = MochiKit.DOM._document.body; + + m.page.x = e.clientX + + (de.scrollLeft || b.scrollLeft) - + (de.clientLeft || 0); + + m.page.y = e.clientY + + (de.scrollTop || b.scrollTop) - + (de.clientTop || 0); + + } + if (this.type() != 'mousemove' && this.type() != 'mousewheel') { + m.button = {}; + m.button.left = false; + m.button.right = false; + m.button.middle = false; + + /* we could check e.button, but which is more consistent */ + if (e.which) { + m.button.left = (e.which == 1); + m.button.middle = (e.which == 2); + m.button.right = (e.which == 3); + + /* + + Mac browsers and right click: + + - Safari doesn't fire any click events on a right + click: + http://bugs.webkit.org/show_bug.cgi?id=6595 + + - Firefox fires the event, and sets ctrlKey = true + + - Opera fires the event, and sets metaKey = true + + oncontextmenu is fired on right clicks between + browsers and across platforms. + + */ + + } else { + m.button.left = !!(e.button & 1); + m.button.right = !!(e.button & 2); + m.button.middle = !!(e.button & 4); + } + } + if (this.type() == 'mousewheel') { + m.wheel = new MochiKit.Style.Coordinates(0, 0); + if (e.wheelDeltaX || e.wheelDeltaY) { + m.wheel.x = e.wheelDeltaX / -40 || 0; + m.wheel.y = e.wheelDeltaY / -40 || 0; + } else if (e.wheelDelta) { + m.wheel.y = e.wheelDelta / -40; + } else { + m.wheel.y = e.detail || 0; + } + } + this._mouse = m; + return m; + } + return undefined; + }, + + /** @id MochiKit.Signal.Event.prototype.stop */ + stop: function () { + this.stopPropagation(); + this.preventDefault(); + }, + + /** @id MochiKit.Signal.Event.prototype.stopPropagation */ + stopPropagation: function () { + if (this._event.stopPropagation) { + this._event.stopPropagation(); + } else { + this._event.cancelBubble = true; + } + }, + + /** @id MochiKit.Signal.Event.prototype.preventDefault */ + preventDefault: function () { + if (this._event.preventDefault) { + this._event.preventDefault(); + } else if (this._confirmUnload === null) { + this._event.returnValue = false; + } + }, + + _confirmUnload: null, + + /** @id MochiKit.Signal.Event.prototype.confirmUnload */ + confirmUnload: function (msg) { + if (this.type() == 'beforeunload') { + this._confirmUnload = msg; + this._event.returnValue = msg; + } + } +}); + +/* Safari sets keyCode to these special values onkeypress. */ +MochiKit.Signal._specialMacKeys = { + 3: 'KEY_ENTER', + 63289: 'KEY_NUM_PAD_CLEAR', + 63276: 'KEY_PAGE_UP', + 63277: 'KEY_PAGE_DOWN', + 63275: 'KEY_END', + 63273: 'KEY_HOME', + 63234: 'KEY_ARROW_LEFT', + 63232: 'KEY_ARROW_UP', + 63235: 'KEY_ARROW_RIGHT', + 63233: 'KEY_ARROW_DOWN', + 63302: 'KEY_INSERT', + 63272: 'KEY_DELETE' +}; + +/* for KEY_F1 - KEY_F12 */ +(function () { + var _specialMacKeys = MochiKit.Signal._specialMacKeys; + for (i = 63236; i <= 63242; i++) { + // no F0 + _specialMacKeys[i] = 'KEY_F' + (i - 63236 + 1); + } +})(); + +/* Standard keyboard key codes. */ +MochiKit.Signal._specialKeys = { + 8: 'KEY_BACKSPACE', + 9: 'KEY_TAB', + 12: 'KEY_NUM_PAD_CLEAR', // weird, for Safari and Mac FF only + 13: 'KEY_ENTER', + 16: 'KEY_SHIFT', + 17: 'KEY_CTRL', + 18: 'KEY_ALT', + 19: 'KEY_PAUSE', + 20: 'KEY_CAPS_LOCK', + 27: 'KEY_ESCAPE', + 32: 'KEY_SPACEBAR', + 33: 'KEY_PAGE_UP', + 34: 'KEY_PAGE_DOWN', + 35: 'KEY_END', + 36: 'KEY_HOME', + 37: 'KEY_ARROW_LEFT', + 38: 'KEY_ARROW_UP', + 39: 'KEY_ARROW_RIGHT', + 40: 'KEY_ARROW_DOWN', + 44: 'KEY_PRINT_SCREEN', + 45: 'KEY_INSERT', + 46: 'KEY_DELETE', + 59: 'KEY_SEMICOLON', // weird, for Safari and IE only + 91: 'KEY_WINDOWS_LEFT', + 92: 'KEY_WINDOWS_RIGHT', + 93: 'KEY_SELECT', + 106: 'KEY_NUM_PAD_ASTERISK', + 107: 'KEY_NUM_PAD_PLUS_SIGN', + 109: 'KEY_NUM_PAD_HYPHEN-MINUS', + 110: 'KEY_NUM_PAD_FULL_STOP', + 111: 'KEY_NUM_PAD_SOLIDUS', + 144: 'KEY_NUM_LOCK', + 145: 'KEY_SCROLL_LOCK', + 186: 'KEY_SEMICOLON', + 187: 'KEY_EQUALS_SIGN', + 188: 'KEY_COMMA', + 189: 'KEY_HYPHEN-MINUS', + 190: 'KEY_FULL_STOP', + 191: 'KEY_SOLIDUS', + 192: 'KEY_GRAVE_ACCENT', + 219: 'KEY_LEFT_SQUARE_BRACKET', + 220: 'KEY_REVERSE_SOLIDUS', + 221: 'KEY_RIGHT_SQUARE_BRACKET', + 222: 'KEY_APOSTROPHE' + // undefined: 'KEY_UNKNOWN' +}; + +(function () { + /* for KEY_0 - KEY_9 */ + var _specialKeys = MochiKit.Signal._specialKeys; + for (var i = 48; i <= 57; i++) { + _specialKeys[i] = 'KEY_' + (i - 48); + } + + /* for KEY_A - KEY_Z */ + for (i = 65; i <= 90; i++) { + _specialKeys[i] = 'KEY_' + String.fromCharCode(i); + } + + /* for KEY_NUM_PAD_0 - KEY_NUM_PAD_9 */ + for (i = 96; i <= 105; i++) { + _specialKeys[i] = 'KEY_NUM_PAD_' + (i - 96); + } + + /* for KEY_F1 - KEY_F12 */ + for (i = 112; i <= 123; i++) { + // no F0 + _specialKeys[i] = 'KEY_F' + (i - 112 + 1); + } +})(); + +/* Internal object to keep track of created signals. */ +MochiKit.Signal.Ident = function (ident) { + this.source = ident.source; + this.signal = ident.signal; + this.listener = ident.listener; + this.isDOM = ident.isDOM; + this.objOrFunc = ident.objOrFunc; + this.funcOrStr = ident.funcOrStr; + this.connected = ident.connected; +}; + +MochiKit.Signal.Ident.prototype = {}; + +MochiKit.Base.update(MochiKit.Signal, { + + __repr__: function () { + return '[' + this.NAME + ' ' + this.VERSION + ']'; + }, + + toString: function () { + return this.__repr__(); + }, + + _unloadCache: function () { + var self = MochiKit.Signal; + var observers = self._observers; + + for (var i = 0; i < observers.length; i++) { + if (observers[i].signal !== 'onload' && observers[i].signal !== 'onunload') { + self._disconnect(observers[i]); + } + } + }, + + _listener: function (src, sig, func, obj, isDOM) { + var self = MochiKit.Signal; + var E = self.Event; + if (!isDOM) { + /* We don't want to re-bind already bound methods */ + if (typeof(func.im_self) == 'undefined') { + return MochiKit.Base.bindLate(func, obj); + } else { + return func; + } + } + obj = obj || src; + if (typeof(func) == "string") { + if (sig === 'onload' || sig === 'onunload') { + return function (nativeEvent) { + obj[func].apply(obj, [new E(src, nativeEvent)]); + + var ident = new MochiKit.Signal.Ident({ + source: src, signal: sig, objOrFunc: obj, funcOrStr: func}); + + MochiKit.Signal._disconnect(ident); + }; + } else { + return function (nativeEvent) { + obj[func].apply(obj, [new E(src, nativeEvent)]); + }; + } + } else { + if (sig === 'onload' || sig === 'onunload') { + return function (nativeEvent) { + func.apply(obj, [new E(src, nativeEvent)]); + + var ident = new MochiKit.Signal.Ident({ + source: src, signal: sig, objOrFunc: func}); + + MochiKit.Signal._disconnect(ident); + }; + } else { + return function (nativeEvent) { + func.apply(obj, [new E(src, nativeEvent)]); + }; + } + } + }, + + _browserAlreadyHasMouseEnterAndLeave: function () { + return /MSIE/.test(navigator.userAgent); + }, + + _browserLacksMouseWheelEvent: function () { + return /Gecko\//.test(navigator.userAgent); + }, + + _mouseEnterListener: function (src, sig, func, obj) { + var E = MochiKit.Signal.Event; + return function (nativeEvent) { + var e = new E(src, nativeEvent); + try { + e.relatedTarget().nodeName; + } catch (err) { + /* probably hit a permission denied error; possibly one of + * firefox's screwy anonymous DIVs inside an input element. + * Allow this event to propogate up. + */ + return; + } + e.stop(); + if (MochiKit.DOM.isChildNode(e.relatedTarget(), src)) { + /* We've moved between our node and a child. Ignore. */ + return; + } + e.type = function () { return sig; }; + if (typeof(func) == "string") { + return obj[func].apply(obj, [e]); + } else { + return func.apply(obj, [e]); + } + }; + }, + + _getDestPair: function (objOrFunc, funcOrStr) { + var obj = null; + var func = null; + if (typeof(funcOrStr) != 'undefined') { + obj = objOrFunc; + func = funcOrStr; + if (typeof(funcOrStr) == 'string') { + if (typeof(objOrFunc[funcOrStr]) != "function") { + throw new Error("'funcOrStr' must be a function on 'objOrFunc'"); + } + } else if (typeof(funcOrStr) != 'function') { + throw new Error("'funcOrStr' must be a function or string"); + } + } else if (typeof(objOrFunc) != "function") { + throw new Error("'objOrFunc' must be a function if 'funcOrStr' is not given"); + } else { + func = objOrFunc; + } + return [obj, func]; + }, + + /** @id MochiKit.Signal.connect */ + connect: function (src, sig, objOrFunc/* optional */, funcOrStr) { + src = MochiKit.DOM.getElement(src); + var self = MochiKit.Signal; + + if (typeof(sig) != 'string') { + throw new Error("'sig' must be a string"); + } + + var destPair = self._getDestPair(objOrFunc, funcOrStr); + var obj = destPair[0]; + var func = destPair[1]; + if (typeof(obj) == 'undefined' || obj === null) { + obj = src; + } + + var isDOM = !!(src.addEventListener || src.attachEvent); + if (isDOM && (sig === "onmouseenter" || sig === "onmouseleave") + && !self._browserAlreadyHasMouseEnterAndLeave()) { + var listener = self._mouseEnterListener(src, sig.substr(2), func, obj); + if (sig === "onmouseenter") { + sig = "onmouseover"; + } else { + sig = "onmouseout"; + } + } else if (isDOM && sig == "onmousewheel" && self._browserLacksMouseWheelEvent()) { + var listener = self._listener(src, sig, func, obj, isDOM); + sig = "onDOMMouseScroll"; + } else { + var listener = self._listener(src, sig, func, obj, isDOM); + } + + if (src.addEventListener) { + src.addEventListener(sig.substr(2), listener, false); + } else if (src.attachEvent) { + src.attachEvent(sig, listener); // useCapture unsupported + } + + var ident = new MochiKit.Signal.Ident({ + source: src, + signal: sig, + listener: listener, + isDOM: isDOM, + objOrFunc: objOrFunc, + funcOrStr: funcOrStr, + connected: true + }); + self._observers.push(ident); + + if (!isDOM && typeof(src.__connect__) == 'function') { + var args = MochiKit.Base.extend([ident], arguments, 1); + src.__connect__.apply(src, args); + } + + return ident; + }, + + _disconnect: function (ident) { + // already disconnected + if (!ident.connected) { + return; + } + ident.connected = false; + var src = ident.source; + var sig = ident.signal; + var listener = ident.listener; + // check isDOM + if (!ident.isDOM) { + if (typeof(src.__disconnect__) == 'function') { + src.__disconnect__(ident, sig, ident.objOrFunc, ident.funcOrStr); + } + return; + } + if (src.removeEventListener) { + src.removeEventListener(sig.substr(2), listener, false); + } else if (src.detachEvent) { + src.detachEvent(sig, listener); // useCapture unsupported + } else { + throw new Error("'src' must be a DOM element"); + } + }, + + /** @id MochiKit.Signal.disconnect */ + disconnect: function (ident) { + var self = MochiKit.Signal; + var observers = self._observers; + var m = MochiKit.Base; + if (arguments.length > 1) { + // compatibility API + var src = MochiKit.DOM.getElement(arguments[0]); + var sig = arguments[1]; + var obj = arguments[2]; + var func = arguments[3]; + for (var i = observers.length - 1; i >= 0; i--) { + var o = observers[i]; + if (o.source === src && o.signal === sig && o.objOrFunc === obj && o.funcOrStr === func) { + self._disconnect(o); + if (!self._lock) { + observers.splice(i, 1); + } else { + self._dirty = true; + } + return true; + } + } + } else { + var idx = m.findIdentical(observers, ident); + if (idx >= 0) { + self._disconnect(ident); + if (!self._lock) { + observers.splice(idx, 1); + } else { + self._dirty = true; + } + return true; + } + } + return false; + }, + + /** @id MochiKit.Signal.disconnectAllTo */ + disconnectAllTo: function (objOrFunc, /* optional */funcOrStr) { + var self = MochiKit.Signal; + var observers = self._observers; + var disconnect = self._disconnect; + var locked = self._lock; + var dirty = self._dirty; + if (typeof(funcOrStr) === 'undefined') { + funcOrStr = null; + } + for (var i = observers.length - 1; i >= 0; i--) { + var ident = observers[i]; + if (ident.objOrFunc === objOrFunc && + (funcOrStr === null || ident.funcOrStr === funcOrStr)) { + disconnect(ident); + if (locked) { + dirty = true; + } else { + observers.splice(i, 1); + } + } + } + self._dirty = dirty; + }, + + /** @id MochiKit.Signal.disconnectAll */ + disconnectAll: function (src/* optional */, sig) { + src = MochiKit.DOM.getElement(src); + var m = MochiKit.Base; + var signals = m.flattenArguments(m.extend(null, arguments, 1)); + var self = MochiKit.Signal; + var disconnect = self._disconnect; + var observers = self._observers; + var i, ident; + var locked = self._lock; + var dirty = self._dirty; + if (signals.length === 0) { + // disconnect all + for (i = observers.length - 1; i >= 0; i--) { + ident = observers[i]; + if (ident.source === src) { + disconnect(ident); + if (!locked) { + observers.splice(i, 1); + } else { + dirty = true; + } + } + } + } else { + var sigs = {}; + for (i = 0; i < signals.length; i++) { + sigs[signals[i]] = true; + } + for (i = observers.length - 1; i >= 0; i--) { + ident = observers[i]; + if (ident.source === src && ident.signal in sigs) { + disconnect(ident); + if (!locked) { + observers.splice(i, 1); + } else { + dirty = true; + } + } + } + } + self._dirty = dirty; + }, + + /** @id MochiKit.Signal.signal */ + signal: function (src, sig) { + var self = MochiKit.Signal; + var observers = self._observers; + src = MochiKit.DOM.getElement(src); + var args = MochiKit.Base.extend(null, arguments, 2); + var errors = []; + self._lock = true; + for (var i = 0; i < observers.length; i++) { + var ident = observers[i]; + if (ident.source === src && ident.signal === sig && + ident.connected) { + try { + ident.listener.apply(src, args); + } catch (e) { + errors.push(e); + } + } + } + self._lock = false; + if (self._dirty) { + self._dirty = false; + for (var i = observers.length - 1; i >= 0; i--) { + if (!observers[i].connected) { + observers.splice(i, 1); + } + } + } + if (errors.length == 1) { + throw errors[0]; + } else if (errors.length > 1) { + var e = new Error("Multiple errors thrown in handling 'sig', see errors property"); + e.errors = errors; + throw e; + } + } + +}); + +MochiKit.Signal.EXPORT_OK = []; + +MochiKit.Signal.EXPORT = [ + 'connect', + 'disconnect', + 'signal', + 'disconnectAll', + 'disconnectAllTo' +]; + +MochiKit.Signal.__new__ = function (win) { + var m = MochiKit.Base; + this._document = document; + this._window = win; + this._lock = false; + this._dirty = false; + + try { + this.connect(window, 'onunload', this._unloadCache); + } catch (e) { + // pass: might not be a browser + } + + this.EXPORT_TAGS = { + ':common': this.EXPORT, + ':all': m.concat(this.EXPORT, this.EXPORT_OK) + }; + + m.nameFunctions(this); +}; + +MochiKit.Signal.__new__(this); + +// +// XXX: Internet Explorer blows +// +if (MochiKit.__export__) { + connect = MochiKit.Signal.connect; + disconnect = MochiKit.Signal.disconnect; + disconnectAll = MochiKit.Signal.disconnectAll; + signal = MochiKit.Signal.signal; +} + +MochiKit.Base._exportSymbols(this, MochiKit.Signal); diff --git a/static/MochiKit/Sortable.js b/static/MochiKit/Sortable.js new file mode 100644 index 0000000..463cce2 --- /dev/null +++ b/static/MochiKit/Sortable.js @@ -0,0 +1,589 @@ +/*** +Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) + Mochi-ized By Thomas Herve (_firstname_@nimail.org) + +See scriptaculous.js for full license. + +***/ + +MochiKit.Base._deps('Sortable', ['Base', 'Iter', 'DOM', 'Position', 'DragAndDrop']); + +MochiKit.Sortable.NAME = 'MochiKit.Sortable'; +MochiKit.Sortable.VERSION = '1.4.2'; + +MochiKit.Sortable.__repr__ = function () { + return '[' + this.NAME + ' ' + this.VERSION + ']'; +}; + +MochiKit.Sortable.toString = function () { + return this.__repr__(); +}; + +MochiKit.Sortable.EXPORT = [ +]; + +MochiKit.Sortable.EXPORT_OK = [ +]; + +MochiKit.Base.update(MochiKit.Sortable, { + /*** + + Manage sortables. Mainly use the create function to add a sortable. + + ***/ + sortables: {}, + + _findRootElement: function (element) { + while (element.tagName.toUpperCase() != "BODY") { + if (element.id && MochiKit.Sortable.sortables[element.id]) { + return element; + } + element = element.parentNode; + } + }, + + _createElementId: function(element) { + if (element.id == null || element.id == "") { + var d = MochiKit.DOM; + var id; + var count = 1; + while (d.getElement(id = "sortable" + count) != null) { + count += 1; + } + d.setNodeAttribute(element, "id", id); + } + }, + + /** @id MochiKit.Sortable.options */ + options: function (element) { + element = MochiKit.Sortable._findRootElement(MochiKit.DOM.getElement(element)); + if (!element) { + return; + } + return MochiKit.Sortable.sortables[element.id]; + }, + + /** @id MochiKit.Sortable.destroy */ + destroy: function (element){ + var s = MochiKit.Sortable.options(element); + var b = MochiKit.Base; + var d = MochiKit.DragAndDrop; + + if (s) { + MochiKit.Signal.disconnect(s.startHandle); + MochiKit.Signal.disconnect(s.endHandle); + b.map(function (dr) { + d.Droppables.remove(dr); + }, s.droppables); + b.map(function (dr) { + dr.destroy(); + }, s.draggables); + + delete MochiKit.Sortable.sortables[s.element.id]; + } + }, + + /** @id MochiKit.Sortable.create */ + create: function (element, options) { + element = MochiKit.DOM.getElement(element); + var self = MochiKit.Sortable; + self._createElementId(element); + + /** @id MochiKit.Sortable.options */ + options = MochiKit.Base.update({ + + /** @id MochiKit.Sortable.element */ + element: element, + + /** @id MochiKit.Sortable.tag */ + tag: 'li', // assumes li children, override with tag: 'tagname' + + /** @id MochiKit.Sortable.dropOnEmpty */ + dropOnEmpty: false, + + /** @id MochiKit.Sortable.tree */ + tree: false, + + /** @id MochiKit.Sortable.treeTag */ + treeTag: 'ul', + + /** @id MochiKit.Sortable.overlap */ + overlap: 'vertical', // one of 'vertical', 'horizontal' + + /** @id MochiKit.Sortable.constraint */ + constraint: 'vertical', // one of 'vertical', 'horizontal', false + // also takes array of elements (or ids); or false + + /** @id MochiKit.Sortable.containment */ + containment: [element], + + /** @id MochiKit.Sortable.handle */ + handle: false, // or a CSS class + + /** @id MochiKit.Sortable.only */ + only: false, + + /** @id MochiKit.Sortable.hoverclass */ + hoverclass: null, + + /** @id MochiKit.Sortable.ghosting */ + ghosting: false, + + /** @id MochiKit.Sortable.scroll */ + scroll: false, + + /** @id MochiKit.Sortable.scrollSensitivity */ + scrollSensitivity: 20, + + /** @id MochiKit.Sortable.scrollSpeed */ + scrollSpeed: 15, + + /** @id MochiKit.Sortable.format */ + format: /^[^_]*_(.*)$/, + + /** @id MochiKit.Sortable.onChange */ + onChange: MochiKit.Base.noop, + + /** @id MochiKit.Sortable.onUpdate */ + onUpdate: MochiKit.Base.noop, + + /** @id MochiKit.Sortable.accept */ + accept: null + }, options); + + // clear any old sortable with same element + self.destroy(element); + + // build options for the draggables + var options_for_draggable = { + revert: true, + ghosting: options.ghosting, + scroll: options.scroll, + scrollSensitivity: options.scrollSensitivity, + scrollSpeed: options.scrollSpeed, + constraint: options.constraint, + handle: options.handle + }; + + if (options.starteffect) { + options_for_draggable.starteffect = options.starteffect; + } + + if (options.reverteffect) { + options_for_draggable.reverteffect = options.reverteffect; + } else if (options.ghosting) { + options_for_draggable.reverteffect = function (innerelement) { + innerelement.style.top = 0; + innerelement.style.left = 0; + }; + } + + if (options.endeffect) { + options_for_draggable.endeffect = options.endeffect; + } + + if (options.zindex) { + options_for_draggable.zindex = options.zindex; + } + + // build options for the droppables + var options_for_droppable = { + overlap: options.overlap, + containment: options.containment, + hoverclass: options.hoverclass, + onhover: self.onHover, + tree: options.tree, + accept: options.accept + } + + var options_for_tree = { + onhover: self.onEmptyHover, + overlap: options.overlap, + containment: options.containment, + hoverclass: options.hoverclass, + accept: options.accept + } + + // fix for gecko engine + MochiKit.DOM.removeEmptyTextNodes(element); + + options.draggables = []; + options.droppables = []; + + // drop on empty handling + if (options.dropOnEmpty || options.tree) { + new MochiKit.DragAndDrop.Droppable(element, options_for_tree); + options.droppables.push(element); + } + MochiKit.Base.map(function (e) { + // handles are per-draggable + var handle = options.handle ? + MochiKit.DOM.getFirstElementByTagAndClassName(null, + options.handle, e) : e; + options.draggables.push( + new MochiKit.DragAndDrop.Draggable(e, + MochiKit.Base.update(options_for_draggable, + {handle: handle}))); + new MochiKit.DragAndDrop.Droppable(e, options_for_droppable); + if (options.tree) { + e.treeNode = element; + } + options.droppables.push(e); + }, (self.findElements(element, options) || [])); + + if (options.tree) { + MochiKit.Base.map(function (e) { + new MochiKit.DragAndDrop.Droppable(e, options_for_tree); + e.treeNode = element; + options.droppables.push(e); + }, (self.findTreeElements(element, options) || [])); + } + + // keep reference + self.sortables[element.id] = options; + + options.lastValue = self.serialize(element); + options.startHandle = MochiKit.Signal.connect(MochiKit.DragAndDrop.Draggables, 'start', + MochiKit.Base.partial(self.onStart, element)); + options.endHandle = MochiKit.Signal.connect(MochiKit.DragAndDrop.Draggables, 'end', + MochiKit.Base.partial(self.onEnd, element)); + }, + + /** @id MochiKit.Sortable.onStart */ + onStart: function (element, draggable) { + var self = MochiKit.Sortable; + var options = self.options(element); + options.lastValue = self.serialize(options.element); + }, + + /** @id MochiKit.Sortable.onEnd */ + onEnd: function (element, draggable) { + var self = MochiKit.Sortable; + self.unmark(); + var options = self.options(element); + if (options.lastValue != self.serialize(options.element)) { + options.onUpdate(options.element); + } + }, + + // return all suitable-for-sortable elements in a guaranteed order + + /** @id MochiKit.Sortable.findElements */ + findElements: function (element, options) { + return MochiKit.Sortable.findChildren(element, options.only, options.tree, options.tag); + }, + + /** @id MochiKit.Sortable.findTreeElements */ + findTreeElements: function (element, options) { + return MochiKit.Sortable.findChildren( + element, options.only, options.tree ? true : false, options.treeTag); + }, + + /** @id MochiKit.Sortable.findChildren */ + findChildren: function (element, only, recursive, tagName) { + if (!element.hasChildNodes()) { + return null; + } + tagName = tagName.toUpperCase(); + if (only) { + only = MochiKit.Base.flattenArray([only]); + } + var elements = []; + MochiKit.Base.map(function (e) { + if (e.tagName && + e.tagName.toUpperCase() == tagName && + (!only || + MochiKit.Iter.some(only, function (c) { + return MochiKit.DOM.hasElementClass(e, c); + }))) { + elements.push(e); + } + if (recursive) { + var grandchildren = MochiKit.Sortable.findChildren(e, only, recursive, tagName); + if (grandchildren && grandchildren.length > 0) { + elements = elements.concat(grandchildren); + } + } + }, element.childNodes); + return elements; + }, + + /** @id MochiKit.Sortable.onHover */ + onHover: function (element, dropon, overlap) { + if (MochiKit.DOM.isChildNode(dropon, element)) { + return; + } + var self = MochiKit.Sortable; + + if (overlap > .33 && overlap < .66 && self.options(dropon).tree) { + return; + } else if (overlap > 0.5) { + self.mark(dropon, 'before'); + if (dropon.previousSibling != element) { + var oldParentNode = element.parentNode; + element.style.visibility = 'hidden'; // fix gecko rendering + dropon.parentNode.insertBefore(element, dropon); + if (dropon.parentNode != oldParentNode) { + self.options(oldParentNode).onChange(element); + } + self.options(dropon.parentNode).onChange(element); + } + } else { + self.mark(dropon, 'after'); + var nextElement = dropon.nextSibling || null; + if (nextElement != element) { + var oldParentNode = element.parentNode; + element.style.visibility = 'hidden'; // fix gecko rendering + dropon.parentNode.insertBefore(element, nextElement); + if (dropon.parentNode != oldParentNode) { + self.options(oldParentNode).onChange(element); + } + self.options(dropon.parentNode).onChange(element); + } + } + }, + + _offsetSize: function (element, type) { + if (type == 'vertical' || type == 'height') { + return element.offsetHeight; + } else { + return element.offsetWidth; + } + }, + + /** @id MochiKit.Sortable.onEmptyHover */ + onEmptyHover: function (element, dropon, overlap) { + var oldParentNode = element.parentNode; + var self = MochiKit.Sortable; + var droponOptions = self.options(dropon); + + if (!MochiKit.DOM.isChildNode(dropon, element)) { + var index; + + var children = self.findElements(dropon, {tag: droponOptions.tag, + only: droponOptions.only}); + var child = null; + + if (children) { + var offset = self._offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap); + + for (index = 0; index < children.length; index += 1) { + if (offset - self._offsetSize(children[index], droponOptions.overlap) >= 0) { + offset -= self._offsetSize(children[index], droponOptions.overlap); + } else if (offset - (self._offsetSize (children[index], droponOptions.overlap) / 2) >= 0) { + child = index + 1 < children.length ? children[index + 1] : null; + break; + } else { + child = children[index]; + break; + } + } + } + + dropon.insertBefore(element, child); + + self.options(oldParentNode).onChange(element); + droponOptions.onChange(element); + } + }, + + /** @id MochiKit.Sortable.unmark */ + unmark: function () { + var m = MochiKit.Sortable._marker; + if (m) { + MochiKit.Style.hideElement(m); + } + }, + + /** @id MochiKit.Sortable.mark */ + mark: function (dropon, position) { + // mark on ghosting only + var d = MochiKit.DOM; + var self = MochiKit.Sortable; + var sortable = self.options(dropon.parentNode); + if (sortable && !sortable.ghosting) { + return; + } + + if (!self._marker) { + self._marker = d.getElement('dropmarker') || + document.createElement('DIV'); + MochiKit.Style.hideElement(self._marker); + d.addElementClass(self._marker, 'dropmarker'); + self._marker.style.position = 'absolute'; + document.getElementsByTagName('body').item(0).appendChild(self._marker); + } + var offsets = MochiKit.Position.cumulativeOffset(dropon); + self._marker.style.left = offsets.x + 'px'; + self._marker.style.top = offsets.y + 'px'; + + if (position == 'after') { + if (sortable.overlap == 'horizontal') { + self._marker.style.left = (offsets.x + dropon.clientWidth) + 'px'; + } else { + self._marker.style.top = (offsets.y + dropon.clientHeight) + 'px'; + } + } + MochiKit.Style.showElement(self._marker); + }, + + _tree: function (element, options, parent) { + var self = MochiKit.Sortable; + var children = self.findElements(element, options) || []; + + for (var i = 0; i < children.length; ++i) { + var match = children[i].id.match(options.format); + + if (!match) { + continue; + } + + var child = { + id: encodeURIComponent(match ? match[1] : null), + element: element, + parent: parent, + children: [], + position: parent.children.length, + container: self._findChildrenElement(children[i], options.treeTag.toUpperCase()) + } + + /* Get the element containing the children and recurse over it */ + if (child.container) { + self._tree(child.container, options, child) + } + + parent.children.push (child); + } + + return parent; + }, + + /* Finds the first element of the given tag type within a parent element. + Used for finding the first LI[ST] within a L[IST]I[TEM].*/ + _findChildrenElement: function (element, containerTag) { + if (element && element.hasChildNodes) { + containerTag = containerTag.toUpperCase(); + for (var i = 0; i < element.childNodes.length; ++i) { + if (element.childNodes[i].tagName.toUpperCase() == containerTag) { + return element.childNodes[i]; + } + } + } + return null; + }, + + /** @id MochiKit.Sortable.tree */ + tree: function (element, options) { + element = MochiKit.DOM.getElement(element); + var sortableOptions = MochiKit.Sortable.options(element); + options = MochiKit.Base.update({ + tag: sortableOptions.tag, + treeTag: sortableOptions.treeTag, + only: sortableOptions.only, + name: element.id, + format: sortableOptions.format + }, options || {}); + + var root = { + id: null, + parent: null, + children: new Array, + container: element, + position: 0 + } + + return MochiKit.Sortable._tree(element, options, root); + }, + + /** + * Specifies the sequence for the Sortable. + * @param {Node} element Element to use as the Sortable. + * @param {Object} newSequence New sequence to use. + * @param {Object} options Options to use fro the Sortable. + */ + setSequence: function (element, newSequence, options) { + var self = MochiKit.Sortable; + var b = MochiKit.Base; + element = MochiKit.DOM.getElement(element); + options = b.update(self.options(element), options || {}); + + var nodeMap = {}; + b.map(function (n) { + var m = n.id.match(options.format); + if (m) { + nodeMap[m[1]] = [n, n.parentNode]; + } + n.parentNode.removeChild(n); + }, self.findElements(element, options)); + + b.map(function (ident) { + var n = nodeMap[ident]; + if (n) { + n[1].appendChild(n[0]); + delete nodeMap[ident]; + } + }, newSequence); + }, + + /* Construct a [i] index for a particular node */ + _constructIndex: function (node) { + var index = ''; + do { + if (node.id) { + index = '[' + node.position + ']' + index; + } + } while ((node = node.parent) != null); + return index; + }, + + /** @id MochiKit.Sortable.sequence */ + sequence: function (element, options) { + element = MochiKit.DOM.getElement(element); + var self = MochiKit.Sortable; + var options = MochiKit.Base.update(self.options(element), options || {}); + + return MochiKit.Base.map(function (item) { + return item.id.match(options.format) ? item.id.match(options.format)[1] : ''; + }, MochiKit.DOM.getElement(self.findElements(element, options) || [])); + }, + + /** + * Serializes the content of a Sortable. Useful to send this content through a XMLHTTPRequest. + * These options override the Sortable options for the serialization only. + * @param {Node} element Element to serialize. + * @param {Object} options Serialization options. + */ + serialize: function (element, options) { + element = MochiKit.DOM.getElement(element); + var self = MochiKit.Sortable; + options = MochiKit.Base.update(self.options(element), options || {}); + var name = encodeURIComponent(options.name || element.id); + + if (options.tree) { + return MochiKit.Base.flattenArray(MochiKit.Base.map(function (item) { + return [name + self._constructIndex(item) + "[id]=" + + encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); + }, self.tree(element, options).children)).join('&'); + } else { + return MochiKit.Base.map(function (item) { + return name + "[]=" + encodeURIComponent(item); + }, self.sequence(element, options)).join('&'); + } + } +}); + +// trunk compatibility +MochiKit.Sortable.Sortable = MochiKit.Sortable; + +MochiKit.Sortable.__new__ = function () { + MochiKit.Base.nameFunctions(this); + + this.EXPORT_TAGS = { + ":common": this.EXPORT, + ":all": MochiKit.Base.concat(this.EXPORT, this.EXPORT_OK) + }; +}; + +MochiKit.Sortable.__new__(); + +MochiKit.Base._exportSymbols(this, MochiKit.Sortable); diff --git a/static/MochiKit/Style.js b/static/MochiKit/Style.js new file mode 100644 index 0000000..68bd919 --- /dev/null +++ b/static/MochiKit/Style.js @@ -0,0 +1,594 @@ +/*** + +MochiKit.Style 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005-2006 Bob Ippolito, Beau Hartshorne. All rights Reserved. + +***/ + +MochiKit.Base._deps('Style', ['Base', 'DOM']); + +MochiKit.Style.NAME = 'MochiKit.Style'; +MochiKit.Style.VERSION = '1.4.2'; +MochiKit.Style.__repr__ = function () { + return '[' + this.NAME + ' ' + this.VERSION + ']'; +}; +MochiKit.Style.toString = function () { + return this.__repr__(); +}; + +MochiKit.Style.EXPORT_OK = []; + +MochiKit.Style.EXPORT = [ + 'setStyle', + 'setOpacity', + 'getStyle', + 'getElementDimensions', + 'elementDimensions', // deprecated + 'setElementDimensions', + 'getElementPosition', + 'elementPosition', // deprecated + 'setElementPosition', + "makePositioned", + "undoPositioned", + "makeClipping", + "undoClipping", + 'setDisplayForElement', + 'hideElement', + 'showElement', + 'getViewportDimensions', + 'getViewportPosition', + 'Dimensions', + 'Coordinates' +]; + + +/* + + Dimensions + +*/ +/** @id MochiKit.Style.Dimensions */ +MochiKit.Style.Dimensions = function (w, h) { + this.w = w; + this.h = h; +}; + +MochiKit.Style.Dimensions.prototype.__repr__ = function () { + var repr = MochiKit.Base.repr; + return '{w: ' + repr(this.w) + ', h: ' + repr(this.h) + '}'; +}; + +MochiKit.Style.Dimensions.prototype.toString = function () { + return this.__repr__(); +}; + + +/* + + Coordinates + +*/ +/** @id MochiKit.Style.Coordinates */ +MochiKit.Style.Coordinates = function (x, y) { + this.x = x; + this.y = y; +}; + +MochiKit.Style.Coordinates.prototype.__repr__ = function () { + var repr = MochiKit.Base.repr; + return '{x: ' + repr(this.x) + ', y: ' + repr(this.y) + '}'; +}; + +MochiKit.Style.Coordinates.prototype.toString = function () { + return this.__repr__(); +}; + + +MochiKit.Base.update(MochiKit.Style, { + + /** @id MochiKit.Style.getStyle */ + getStyle: function (elem, cssProperty) { + var dom = MochiKit.DOM; + var d = dom._document; + + elem = dom.getElement(elem); + cssProperty = MochiKit.Base.camelize(cssProperty); + + if (!elem || elem == d) { + return undefined; + } + if (cssProperty == 'opacity' && typeof(elem.filters) != 'undefined') { + var opacity = (MochiKit.Style.getStyle(elem, 'filter') || '').match(/alpha\(opacity=(.*)\)/); + if (opacity && opacity[1]) { + return parseFloat(opacity[1]) / 100; + } + return 1.0; + } + if (cssProperty == 'float' || cssProperty == 'cssFloat' || cssProperty == 'styleFloat') { + if (elem.style["float"]) { + return elem.style["float"]; + } else if (elem.style.cssFloat) { + return elem.style.cssFloat; + } else if (elem.style.styleFloat) { + return elem.style.styleFloat; + } else { + return "none"; + } + } + var value = elem.style ? elem.style[cssProperty] : null; + if (!value) { + if (d.defaultView && d.defaultView.getComputedStyle) { + var css = d.defaultView.getComputedStyle(elem, null); + cssProperty = cssProperty.replace(/([A-Z])/g, '-$1' + ).toLowerCase(); // from dojo.style.toSelectorCase + value = css ? css.getPropertyValue(cssProperty) : null; + } else if (elem.currentStyle) { + value = elem.currentStyle[cssProperty]; + if (/^\d/.test(value) && !/px$/.test(value) && cssProperty != 'fontWeight') { + /* Convert to px using an hack from Dean Edwards */ + var left = elem.style.left; + var rsLeft = elem.runtimeStyle.left; + elem.runtimeStyle.left = elem.currentStyle.left; + elem.style.left = value || 0; + value = elem.style.pixelLeft + "px"; + elem.style.left = left; + elem.runtimeStyle.left = rsLeft; + } + } + } + if (cssProperty == 'opacity') { + value = parseFloat(value); + } + + if (/Opera/.test(navigator.userAgent) && (MochiKit.Base.findValue(['left', 'top', 'right', 'bottom'], cssProperty) != -1)) { + if (MochiKit.Style.getStyle(elem, 'position') == 'static') { + value = 'auto'; + } + } + + return value == 'auto' ? null : value; + }, + + /** @id MochiKit.Style.setStyle */ + setStyle: function (elem, style) { + elem = MochiKit.DOM.getElement(elem); + for (var name in style) { + switch (name) { + case 'opacity': + MochiKit.Style.setOpacity(elem, style[name]); + break; + case 'float': + case 'cssFloat': + case 'styleFloat': + if (typeof(elem.style["float"]) != "undefined") { + elem.style["float"] = style[name]; + } else if (typeof(elem.style.cssFloat) != "undefined") { + elem.style.cssFloat = style[name]; + } else { + elem.style.styleFloat = style[name]; + } + break; + default: + elem.style[MochiKit.Base.camelize(name)] = style[name]; + } + } + }, + + /** @id MochiKit.Style.setOpacity */ + setOpacity: function (elem, o) { + elem = MochiKit.DOM.getElement(elem); + var self = MochiKit.Style; + if (o == 1) { + var toSet = /Gecko/.test(navigator.userAgent) && !(/Konqueror|AppleWebKit|KHTML/.test(navigator.userAgent)); + elem.style["opacity"] = toSet ? 0.999999 : 1.0; + if (/MSIE/.test(navigator.userAgent)) { + elem.style['filter'] = + self.getStyle(elem, 'filter').replace(/alpha\([^\)]*\)/gi, ''); + } + } else { + if (o < 0.00001) { + o = 0; + } + elem.style["opacity"] = o; + if (/MSIE/.test(navigator.userAgent)) { + elem.style['filter'] = + self.getStyle(elem, 'filter').replace(/alpha\([^\)]*\)/gi, '') + 'alpha(opacity=' + o * 100 + ')'; + } + } + }, + + /* + + getElementPosition is adapted from YAHOO.util.Dom.getXY v0.9.0. + Copyright: Copyright (c) 2006, Yahoo! Inc. All rights reserved. + License: BSD, http://developer.yahoo.net/yui/license.txt + + */ + + /** @id MochiKit.Style.getElementPosition */ + getElementPosition: function (elem, /* optional */relativeTo) { + var self = MochiKit.Style; + var dom = MochiKit.DOM; + elem = dom.getElement(elem); + + if (!elem || + (!(elem.x && elem.y) && + (!elem.parentNode === null || + self.getStyle(elem, 'display') == 'none'))) { + return undefined; + } + + var c = new self.Coordinates(0, 0); + var box = null; + var parent = null; + + var d = MochiKit.DOM._document; + var de = d.documentElement; + var b = d.body; + + if (!elem.parentNode && elem.x && elem.y) { + /* it's just a MochiKit.Style.Coordinates object */ + c.x += elem.x || 0; + c.y += elem.y || 0; + } else if (elem.getBoundingClientRect) { // IE shortcut + /* + + The IE shortcut can be off by two. We fix it. See: + http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/getboundingclientrect.asp + + This is similar to the method used in + MochiKit.Signal.Event.mouse(). + + */ + box = elem.getBoundingClientRect(); + + c.x += box.left + + (de.scrollLeft || b.scrollLeft) - + (de.clientLeft || 0); + + c.y += box.top + + (de.scrollTop || b.scrollTop) - + (de.clientTop || 0); + + } else if (elem.offsetParent) { + c.x += elem.offsetLeft; + c.y += elem.offsetTop; + parent = elem.offsetParent; + + if (parent != elem) { + while (parent) { + c.x += parseInt(parent.style.borderLeftWidth) || 0; + c.y += parseInt(parent.style.borderTopWidth) || 0; + c.x += parent.offsetLeft; + c.y += parent.offsetTop; + parent = parent.offsetParent; + } + } + + /* + + Opera < 9 and old Safari (absolute) incorrectly account for + body offsetTop and offsetLeft. + + */ + var ua = navigator.userAgent.toLowerCase(); + if ((typeof(opera) != 'undefined' && + parseFloat(opera.version()) < 9) || + (ua.indexOf('AppleWebKit') != -1 && + self.getStyle(elem, 'position') == 'absolute')) { + + c.x -= b.offsetLeft; + c.y -= b.offsetTop; + + } + + // Adjust position for strange Opera scroll bug + if (elem.parentNode) { + parent = elem.parentNode; + } else { + parent = null; + } + while (parent) { + var tagName = parent.tagName.toUpperCase(); + if (tagName === 'BODY' || tagName === 'HTML') { + break; + } + var disp = self.getStyle(parent, 'display'); + // Handle strange Opera bug for some display + if (disp.search(/^inline|table-row.*$/i)) { + c.x -= parent.scrollLeft; + c.y -= parent.scrollTop; + } + if (parent.parentNode) { + parent = parent.parentNode; + } else { + parent = null; + } + } + } + + if (typeof(relativeTo) != 'undefined') { + relativeTo = arguments.callee(relativeTo); + if (relativeTo) { + c.x -= (relativeTo.x || 0); + c.y -= (relativeTo.y || 0); + } + } + + return c; + }, + + /** @id MochiKit.Style.setElementPosition */ + setElementPosition: function (elem, newPos/* optional */, units) { + elem = MochiKit.DOM.getElement(elem); + if (typeof(units) == 'undefined') { + units = 'px'; + } + var newStyle = {}; + var isUndefNull = MochiKit.Base.isUndefinedOrNull; + if (!isUndefNull(newPos.x)) { + newStyle['left'] = newPos.x + units; + } + if (!isUndefNull(newPos.y)) { + newStyle['top'] = newPos.y + units; + } + MochiKit.DOM.updateNodeAttributes(elem, {'style': newStyle}); + }, + + /** @id MochiKit.Style.makePositioned */ + makePositioned: function (element) { + element = MochiKit.DOM.getElement(element); + var pos = MochiKit.Style.getStyle(element, 'position'); + if (pos == 'static' || !pos) { + element.style.position = 'relative'; + // Opera returns the offset relative to the positioning context, + // when an element is position relative but top and left have + // not been defined + if (/Opera/.test(navigator.userAgent)) { + element.style.top = 0; + element.style.left = 0; + } + } + }, + + /** @id MochiKit.Style.undoPositioned */ + undoPositioned: function (element) { + element = MochiKit.DOM.getElement(element); + if (element.style.position == 'relative') { + element.style.position = element.style.top = element.style.left = element.style.bottom = element.style.right = ''; + } + }, + + /** @id MochiKit.Style.makeClipping */ + makeClipping: function (element) { + element = MochiKit.DOM.getElement(element); + var s = element.style; + var oldOverflow = { 'overflow': s.overflow, + 'overflow-x': s.overflowX, + 'overflow-y': s.overflowY }; + if ((MochiKit.Style.getStyle(element, 'overflow') || 'visible') != 'hidden') { + element.style.overflow = 'hidden'; + element.style.overflowX = 'hidden'; + element.style.overflowY = 'hidden'; + } + return oldOverflow; + }, + + /** @id MochiKit.Style.undoClipping */ + undoClipping: function (element, overflow) { + element = MochiKit.DOM.getElement(element); + if (typeof(overflow) == 'string') { + element.style.overflow = overflow; + } else if (overflow != null) { + element.style.overflow = overflow['overflow']; + element.style.overflowX = overflow['overflow-x']; + element.style.overflowY = overflow['overflow-y']; + } + }, + + /** @id MochiKit.Style.getElementDimensions */ + getElementDimensions: function (elem, contentSize/*optional*/) { + var self = MochiKit.Style; + var dom = MochiKit.DOM; + if (typeof(elem.w) == 'number' || typeof(elem.h) == 'number') { + return new self.Dimensions(elem.w || 0, elem.h || 0); + } + elem = dom.getElement(elem); + if (!elem) { + return undefined; + } + var disp = self.getStyle(elem, 'display'); + // display can be empty/undefined on WebKit/KHTML + if (disp == 'none' || disp == '' || typeof(disp) == 'undefined') { + var s = elem.style; + var originalVisibility = s.visibility; + var originalPosition = s.position; + var originalDisplay = s.display; + s.visibility = 'hidden'; + s.position = 'absolute'; + s.display = self._getDefaultDisplay(elem); + var originalWidth = elem.offsetWidth; + var originalHeight = elem.offsetHeight; + s.display = originalDisplay; + s.position = originalPosition; + s.visibility = originalVisibility; + } else { + originalWidth = elem.offsetWidth || 0; + originalHeight = elem.offsetHeight || 0; + } + if (contentSize) { + var tableCell = 'colSpan' in elem && 'rowSpan' in elem; + var collapse = (tableCell && elem.parentNode && self.getStyle( + elem.parentNode, 'borderCollapse') == 'collapse') + if (collapse) { + if (/MSIE/.test(navigator.userAgent)) { + var borderLeftQuota = elem.previousSibling? 0.5 : 1; + var borderRightQuota = elem.nextSibling? 0.5 : 1; + } + else { + var borderLeftQuota = 0.5; + var borderRightQuota = 0.5; + } + } else { + var borderLeftQuota = 1; + var borderRightQuota = 1; + } + originalWidth -= Math.round( + (parseFloat(self.getStyle(elem, 'paddingLeft')) || 0) + + (parseFloat(self.getStyle(elem, 'paddingRight')) || 0) + + borderLeftQuota * + (parseFloat(self.getStyle(elem, 'borderLeftWidth')) || 0) + + borderRightQuota * + (parseFloat(self.getStyle(elem, 'borderRightWidth')) || 0) + ); + if (tableCell) { + if (/Gecko|Opera/.test(navigator.userAgent) + && !/Konqueror|AppleWebKit|KHTML/.test(navigator.userAgent)) { + var borderHeightQuota = 0; + } else if (/MSIE/.test(navigator.userAgent)) { + var borderHeightQuota = 1; + } else { + var borderHeightQuota = collapse? 0.5 : 1; + } + } else { + var borderHeightQuota = 1; + } + originalHeight -= Math.round( + (parseFloat(self.getStyle(elem, 'paddingTop')) || 0) + + (parseFloat(self.getStyle(elem, 'paddingBottom')) || 0) + + borderHeightQuota * ( + (parseFloat(self.getStyle(elem, 'borderTopWidth')) || 0) + + (parseFloat(self.getStyle(elem, 'borderBottomWidth')) || 0)) + ); + } + return new self.Dimensions(originalWidth, originalHeight); + }, + + /** @id MochiKit.Style.setElementDimensions */ + setElementDimensions: function (elem, newSize/* optional */, units) { + elem = MochiKit.DOM.getElement(elem); + if (typeof(units) == 'undefined') { + units = 'px'; + } + var newStyle = {}; + var isUndefNull = MochiKit.Base.isUndefinedOrNull; + if (!isUndefNull(newSize.w)) { + newStyle['width'] = newSize.w + units; + } + if (!isUndefNull(newSize.h)) { + newStyle['height'] = newSize.h + units; + } + MochiKit.DOM.updateNodeAttributes(elem, {'style': newStyle}); + }, + + _getDefaultDisplay: function (elem) { + var self = MochiKit.Style; + var dom = MochiKit.DOM; + elem = dom.getElement(elem); + if (!elem) { + return undefined; + } + var tagName = elem.tagName.toUpperCase(); + return self._defaultDisplay[tagName] || 'block'; + }, + + /** @id MochiKit.Style.setDisplayForElement */ + setDisplayForElement: function (display, element/*, ...*/) { + var elements = MochiKit.Base.extend(null, arguments, 1); + var getElement = MochiKit.DOM.getElement; + for (var i = 0; i < elements.length; i++) { + element = getElement(elements[i]); + if (element) { + element.style.display = display; + } + } + }, + + /** @id MochiKit.Style.getViewportDimensions */ + getViewportDimensions: function () { + var d = new MochiKit.Style.Dimensions(); + var w = MochiKit.DOM._window; + var b = MochiKit.DOM._document.body; + if (w.innerWidth) { + d.w = w.innerWidth; + d.h = w.innerHeight; + } else if (b && b.parentElement && b.parentElement.clientWidth) { + d.w = b.parentElement.clientWidth; + d.h = b.parentElement.clientHeight; + } else if (b && b.clientWidth) { + d.w = b.clientWidth; + d.h = b.clientHeight; + } + return d; + }, + + /** @id MochiKit.Style.getViewportPosition */ + getViewportPosition: function () { + var c = new MochiKit.Style.Coordinates(0, 0); + var d = MochiKit.DOM._document; + var de = d.documentElement; + var db = d.body; + if (de && (de.scrollTop || de.scrollLeft)) { + c.x = de.scrollLeft; + c.y = de.scrollTop; + } else if (db) { + c.x = db.scrollLeft; + c.y = db.scrollTop; + } + return c; + }, + + __new__: function () { + var m = MochiKit.Base; + + var inlines = ['A','ABBR','ACRONYM','B','BASEFONT','BDO','BIG','BR', + 'CITE','CODE','DFN','EM','FONT','I','IMG','KBD','LABEL', + 'Q','S','SAMP','SMALL','SPAN','STRIKE','STRONG','SUB', + 'SUP','TEXTAREA','TT','U','VAR']; + this._defaultDisplay = { 'TABLE': 'table', + 'THEAD': 'table-header-group', + 'TBODY': 'table-row-group', + 'TFOOT': 'table-footer-group', + 'COLGROUP': 'table-column-group', + 'COL': 'table-column', + 'TR': 'table-row', + 'TD': 'table-cell', + 'TH': 'table-cell', + 'CAPTION': 'table-caption', + 'LI': 'list-item', + 'INPUT': 'inline-block', + 'SELECT': 'inline-block' }; + // CSS 'display' support in IE6/7 is just broken... + if (/MSIE/.test(navigator.userAgent)) { + for (var k in this._defaultDisplay) { + var v = this._defaultDisplay[k]; + if (v.indexOf('table') == 0) { + this._defaultDisplay[k] = 'block'; + } + } + } + for (var i = 0; i < inlines.length; i++) { + this._defaultDisplay[inlines[i]] = 'inline'; + } + + this.elementPosition = this.getElementPosition; + this.elementDimensions = this.getElementDimensions; + + this.hideElement = m.partial(this.setDisplayForElement, 'none'); + // TODO: showElement could be improved by using getDefaultDisplay. + this.showElement = m.partial(this.setDisplayForElement, 'block'); + + this.EXPORT_TAGS = { + ':common': this.EXPORT, + ':all': m.concat(this.EXPORT, this.EXPORT_OK) + }; + + m.nameFunctions(this); + } +}); + +MochiKit.Style.__new__(); +MochiKit.Base._exportSymbols(this, MochiKit.Style); diff --git a/static/MochiKit/Test.js b/static/MochiKit/Test.js new file mode 100644 index 0000000..30bfb4c --- /dev/null +++ b/static/MochiKit/Test.js @@ -0,0 +1,162 @@ +/*** + +MochiKit.Test 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito. All rights Reserved. + +***/ + +MochiKit.Base._deps('Test', ['Base']); + +MochiKit.Test.NAME = "MochiKit.Test"; +MochiKit.Test.VERSION = "1.4.2"; +MochiKit.Test.__repr__ = function () { + return "[" + this.NAME + " " + this.VERSION + "]"; +}; + +MochiKit.Test.toString = function () { + return this.__repr__(); +}; + + +MochiKit.Test.EXPORT = ["runTests"]; +MochiKit.Test.EXPORT_OK = []; + +MochiKit.Test.runTests = function (obj) { + if (typeof(obj) == "string") { + obj = JSAN.use(obj); + } + var suite = new MochiKit.Test.Suite(); + suite.run(obj); +}; + +MochiKit.Test.Suite = function () { + this.testIndex = 0; + MochiKit.Base.bindMethods(this); +}; + +MochiKit.Test.Suite.prototype = { + run: function (obj) { + try { + obj(this); + } catch (e) { + this.traceback(e); + } + }, + traceback: function (e) { + var items = MochiKit.Iter.sorted(MochiKit.Base.items(e)); + print("not ok " + this.testIndex + " - Error thrown"); + for (var i = 0; i < items.length; i++) { + var kv = items[i]; + if (kv[0] == "stack") { + kv[1] = kv[1].split(/\n/)[0]; + } + this.print("# " + kv.join(": ")); + } + }, + print: function (s) { + print(s); + }, + is: function (got, expected, /* optional */message) { + var res = 1; + var msg = null; + try { + res = MochiKit.Base.compare(got, expected); + } catch (e) { + msg = "Can not compare " + typeof(got) + ":" + typeof(expected); + } + if (res) { + msg = "Expected value did not compare equal"; + } + if (!res) { + return this.testResult(true, message); + } + return this.testResult(false, message, + [[msg], ["got:", got], ["expected:", expected]]); + }, + + testResult: function (pass, msg, failures) { + this.testIndex += 1; + if (pass) { + this.print("ok " + this.testIndex + " - " + msg); + return; + } + this.print("not ok " + this.testIndex + " - " + msg); + if (failures) { + for (var i = 0; i < failures.length; i++) { + this.print("# " + failures[i].join(" ")); + } + } + }, + + isDeeply: function (got, expected, /* optional */message) { + var m = MochiKit.Base; + var res = 1; + try { + res = m.compare(got, expected); + } catch (e) { + // pass + } + if (res === 0) { + return this.ok(true, message); + } + var gk = m.keys(got); + var ek = m.keys(expected); + gk.sort(); + ek.sort(); + if (m.compare(gk, ek)) { + // differing keys + var cmp = {}; + var i; + for (i = 0; i < gk.length; i++) { + cmp[gk[i]] = "got"; + } + for (i = 0; i < ek.length; i++) { + if (ek[i] in cmp) { + delete cmp[ek[i]]; + } else { + cmp[ek[i]] = "expected"; + } + } + var diffkeys = m.keys(cmp); + diffkeys.sort(); + var gotkeys = []; + var expkeys = []; + while (diffkeys.length) { + var k = diffkeys.shift(); + if (k in Object.prototype) { + continue; + } + (cmp[k] == "got" ? gotkeys : expkeys).push(k); + } + + + } + + return this.testResult((!res), msg, + (msg ? [["got:", got], ["expected:", expected]] : undefined) + ); + }, + + ok: function (res, message) { + return this.testResult(res, message); + } +}; + +MochiKit.Test.__new__ = function () { + var m = MochiKit.Base; + + this.EXPORT_TAGS = { + ":common": this.EXPORT, + ":all": m.concat(this.EXPORT, this.EXPORT_OK) + }; + + m.nameFunctions(this); + +}; + +MochiKit.Test.__new__(); + +MochiKit.Base._exportSymbols(this, MochiKit.Test); diff --git a/static/MochiKit/Visual.js b/static/MochiKit/Visual.js new file mode 100644 index 0000000..df97554 --- /dev/null +++ b/static/MochiKit/Visual.js @@ -0,0 +1,2026 @@ +/*** + +MochiKit.Visual 1.4.2 + +See for documentation, downloads, license, etc. + +(c) 2005 Bob Ippolito and others. All rights Reserved. + +***/ + +MochiKit.Base._deps('Visual', ['Base', 'DOM', 'Style', 'Color', 'Position']); + +MochiKit.Visual.NAME = "MochiKit.Visual"; +MochiKit.Visual.VERSION = "1.4.2"; + +MochiKit.Visual.__repr__ = function () { + return "[" + this.NAME + " " + this.VERSION + "]"; +}; + +MochiKit.Visual.toString = function () { + return this.__repr__(); +}; + +MochiKit.Visual._RoundCorners = function (e, options) { + e = MochiKit.DOM.getElement(e); + this._setOptions(options); + if (this.options.__unstable__wrapElement) { + e = this._doWrap(e); + } + + var color = this.options.color; + var C = MochiKit.Color.Color; + if (this.options.color === "fromElement") { + color = C.fromBackground(e); + } else if (!(color instanceof C)) { + color = C.fromString(color); + } + this.isTransparent = (color.asRGB().a <= 0); + + var bgColor = this.options.bgColor; + if (this.options.bgColor === "fromParent") { + bgColor = C.fromBackground(e.offsetParent); + } else if (!(bgColor instanceof C)) { + bgColor = C.fromString(bgColor); + } + + this._roundCornersImpl(e, color, bgColor); +}; + +MochiKit.Visual._RoundCorners.prototype = { + _doWrap: function (e) { + var parent = e.parentNode; + var doc = MochiKit.DOM.currentDocument(); + if (typeof(doc.defaultView) === "undefined" + || doc.defaultView === null) { + return e; + } + var style = doc.defaultView.getComputedStyle(e, null); + if (typeof(style) === "undefined" || style === null) { + return e; + } + var wrapper = MochiKit.DOM.DIV({"style": { + display: "block", + // convert padding to margin + marginTop: style.getPropertyValue("padding-top"), + marginRight: style.getPropertyValue("padding-right"), + marginBottom: style.getPropertyValue("padding-bottom"), + marginLeft: style.getPropertyValue("padding-left"), + // remove padding so the rounding looks right + padding: "0px" + /* + paddingRight: "0px", + paddingLeft: "0px" + */ + }}); + wrapper.innerHTML = e.innerHTML; + e.innerHTML = ""; + e.appendChild(wrapper); + return e; + }, + + _roundCornersImpl: function (e, color, bgColor) { + if (this.options.border) { + this._renderBorder(e, bgColor); + } + if (this._isTopRounded()) { + this._roundTopCorners(e, color, bgColor); + } + if (this._isBottomRounded()) { + this._roundBottomCorners(e, color, bgColor); + } + }, + + _renderBorder: function (el, bgColor) { + var borderValue = "1px solid " + this._borderColor(bgColor); + var borderL = "border-left: " + borderValue; + var borderR = "border-right: " + borderValue; + var style = "style='" + borderL + ";" + borderR + "'"; + el.innerHTML = "

" + el.innerHTML + "
"; + }, + + _roundTopCorners: function (el, color, bgColor) { + var corner = this._createCorner(bgColor); + for (var i = 0; i < this.options.numSlices; i++) { + corner.appendChild( + this._createCornerSlice(color, bgColor, i, "top") + ); + } + el.style.paddingTop = 0; + el.insertBefore(corner, el.firstChild); + }, + + _roundBottomCorners: function (el, color, bgColor) { + var corner = this._createCorner(bgColor); + for (var i = (this.options.numSlices - 1); i >= 0; i--) { + corner.appendChild( + this._createCornerSlice(color, bgColor, i, "bottom") + ); + } + el.style.paddingBottom = 0; + el.appendChild(corner); + }, + + _createCorner: function (bgColor) { + var dom = MochiKit.DOM; + return dom.DIV({style: {backgroundColor: bgColor.toString()}}); + }, + + _createCornerSlice: function (color, bgColor, n, position) { + var slice = MochiKit.DOM.SPAN(); + + var inStyle = slice.style; + inStyle.backgroundColor = color.toString(); + inStyle.display = "block"; + inStyle.height = "1px"; + inStyle.overflow = "hidden"; + inStyle.fontSize = "1px"; + + var borderColor = this._borderColor(color, bgColor); + if (this.options.border && n === 0) { + inStyle.borderTopStyle = "solid"; + inStyle.borderTopWidth = "1px"; + inStyle.borderLeftWidth = "0px"; + inStyle.borderRightWidth = "0px"; + inStyle.borderBottomWidth = "0px"; + // assumes css compliant box model + inStyle.height = "0px"; + inStyle.borderColor = borderColor.toString(); + } else if (borderColor) { + inStyle.borderColor = borderColor.toString(); + inStyle.borderStyle = "solid"; + inStyle.borderWidth = "0px 1px"; + } + + if (!this.options.compact && (n == (this.options.numSlices - 1))) { + inStyle.height = "2px"; + } + + this._setMargin(slice, n, position); + this._setBorder(slice, n, position); + + return slice; + }, + + _setOptions: function (options) { + this.options = { + corners: "all", + color: "fromElement", + bgColor: "fromParent", + blend: true, + border: false, + compact: false, + __unstable__wrapElement: false + }; + MochiKit.Base.update(this.options, options); + + this.options.numSlices = (this.options.compact ? 2 : 4); + }, + + _whichSideTop: function () { + var corners = this.options.corners; + if (this._hasString(corners, "all", "top")) { + return ""; + } + + var has_tl = (corners.indexOf("tl") != -1); + var has_tr = (corners.indexOf("tr") != -1); + if (has_tl && has_tr) { + return ""; + } + if (has_tl) { + return "left"; + } + if (has_tr) { + return "right"; + } + return ""; + }, + + _whichSideBottom: function () { + var corners = this.options.corners; + if (this._hasString(corners, "all", "bottom")) { + return ""; + } + + var has_bl = (corners.indexOf('bl') != -1); + var has_br = (corners.indexOf('br') != -1); + if (has_bl && has_br) { + return ""; + } + if (has_bl) { + return "left"; + } + if (has_br) { + return "right"; + } + return ""; + }, + + _borderColor: function (color, bgColor) { + if (color == "transparent") { + return bgColor; + } else if (this.options.border) { + return this.options.border; + } else if (this.options.blend) { + return bgColor.blendedColor(color); + } + return ""; + }, + + + _setMargin: function (el, n, corners) { + var marginSize = this._marginSize(n) + "px"; + var whichSide = ( + corners == "top" ? this._whichSideTop() : this._whichSideBottom() + ); + var style = el.style; + + if (whichSide == "left") { + style.marginLeft = marginSize; + style.marginRight = "0px"; + } else if (whichSide == "right") { + style.marginRight = marginSize; + style.marginLeft = "0px"; + } else { + style.marginLeft = marginSize; + style.marginRight = marginSize; + } + }, + + _setBorder: function (el, n, corners) { + var borderSize = this._borderSize(n) + "px"; + var whichSide = ( + corners == "top" ? this._whichSideTop() : this._whichSideBottom() + ); + + var style = el.style; + if (whichSide == "left") { + style.borderLeftWidth = borderSize; + style.borderRightWidth = "0px"; + } else if (whichSide == "right") { + style.borderRightWidth = borderSize; + style.borderLeftWidth = "0px"; + } else { + style.borderLeftWidth = borderSize; + style.borderRightWidth = borderSize; + } + }, + + _marginSize: function (n) { + if (this.isTransparent) { + return 0; + } + + var o = this.options; + if (o.compact && o.blend) { + var smBlendedMarginSizes = [1, 0]; + return smBlendedMarginSizes[n]; + } else if (o.compact) { + var compactMarginSizes = [2, 1]; + return compactMarginSizes[n]; + } else if (o.blend) { + var blendedMarginSizes = [3, 2, 1, 0]; + return blendedMarginSizes[n]; + } else { + var marginSizes = [5, 3, 2, 1]; + return marginSizes[n]; + } + }, + + _borderSize: function (n) { + var o = this.options; + var borderSizes; + if (o.compact && (o.blend || this.isTransparent)) { + return 1; + } else if (o.compact) { + borderSizes = [1, 0]; + } else if (o.blend) { + borderSizes = [2, 1, 1, 1]; + } else if (o.border) { + borderSizes = [0, 2, 0, 0]; + } else if (this.isTransparent) { + borderSizes = [5, 3, 2, 1]; + } else { + return 0; + } + return borderSizes[n]; + }, + + _hasString: function (str) { + for (var i = 1; i< arguments.length; i++) { + if (str.indexOf(arguments[i]) != -1) { + return true; + } + } + return false; + }, + + _isTopRounded: function () { + return this._hasString(this.options.corners, + "all", "top", "tl", "tr" + ); + }, + + _isBottomRounded: function () { + return this._hasString(this.options.corners, + "all", "bottom", "bl", "br" + ); + }, + + _hasSingleTextChild: function (el) { + return (el.childNodes.length == 1 && el.childNodes[0].nodeType == 3); + } +}; + +/** @id MochiKit.Visual.roundElement */ +MochiKit.Visual.roundElement = function (e, options) { + new MochiKit.Visual._RoundCorners(e, options); +}; + +/** @id MochiKit.Visual.roundClass */ +MochiKit.Visual.roundClass = function (tagName, className, options) { + var elements = MochiKit.DOM.getElementsByTagAndClassName( + tagName, className + ); + for (var i = 0; i < elements.length; i++) { + MochiKit.Visual.roundElement(elements[i], options); + } +}; + +/** @id MochiKit.Visual.tagifyText */ +MochiKit.Visual.tagifyText = function (element, /* optional */tagifyStyle) { + /*** + + Change a node text to character in tags. + + @param tagifyStyle: the style to apply to character nodes, default to + 'position: relative'. + + ***/ + tagifyStyle = tagifyStyle || 'position:relative'; + if (/MSIE/.test(navigator.userAgent)) { + tagifyStyle += ';zoom:1'; + } + element = MochiKit.DOM.getElement(element); + var ma = MochiKit.Base.map; + ma(function (child) { + if (child.nodeType == 3) { + ma(function (character) { + element.insertBefore( + MochiKit.DOM.SPAN({style: tagifyStyle}, + character == ' ' ? String.fromCharCode(160) : character), child); + }, child.nodeValue.split('')); + MochiKit.DOM.removeElement(child); + } + }, element.childNodes); +}; + +/** @id MochiKit.Visual.forceRerendering */ +MochiKit.Visual.forceRerendering = function (element) { + try { + element = MochiKit.DOM.getElement(element); + var n = document.createTextNode(' '); + element.appendChild(n); + element.removeChild(n); + } catch(e) { + } +}; + +/** @id MochiKit.Visual.multiple */ +MochiKit.Visual.multiple = function (elements, effect, /* optional */options) { + /*** + + Launch the same effect subsequently on given elements. + + ***/ + options = MochiKit.Base.update({ + speed: 0.1, delay: 0.0 + }, options); + var masterDelay = options.delay; + var index = 0; + MochiKit.Base.map(function (innerelement) { + options.delay = index * options.speed + masterDelay; + new effect(innerelement, options); + index += 1; + }, elements); +}; + +MochiKit.Visual.PAIRS = { + 'slide': ['slideDown', 'slideUp'], + 'blind': ['blindDown', 'blindUp'], + 'appear': ['appear', 'fade'], + 'size': ['grow', 'shrink'] +}; + +/** @id MochiKit.Visual.toggle */ +MochiKit.Visual.toggle = function (element, /* optional */effect, /* optional */options) { + /*** + + Toggle an item between two state depending of its visibility, making + a effect between these states. Default effect is 'appear', can be + 'slide' or 'blind'. + + ***/ + element = MochiKit.DOM.getElement(element); + effect = (effect || 'appear').toLowerCase(); + options = MochiKit.Base.update({ + queue: {position: 'end', scope: (element.id || 'global'), limit: 1} + }, options); + var v = MochiKit.Visual; + v[MochiKit.Style.getStyle(element, 'display') != 'none' ? + v.PAIRS[effect][1] : v.PAIRS[effect][0]](element, options); +}; + +/*** + +Transitions: define functions calculating variations depending of a position. + +***/ + +MochiKit.Visual.Transitions = {}; + +/** @id MochiKit.Visual.Transitions.linear */ +MochiKit.Visual.Transitions.linear = function (pos) { + return pos; +}; + +/** @id MochiKit.Visual.Transitions.sinoidal */ +MochiKit.Visual.Transitions.sinoidal = function (pos) { + return 0.5 - Math.cos(pos*Math.PI)/2; +}; + +/** @id MochiKit.Visual.Transitions.reverse */ +MochiKit.Visual.Transitions.reverse = function (pos) { + return 1 - pos; +}; + +/** @id MochiKit.Visual.Transitions.flicker */ +MochiKit.Visual.Transitions.flicker = function (pos) { + return 0.25 - Math.cos(pos*Math.PI)/4 + Math.random()/2; +}; + +/** @id MochiKit.Visual.Transitions.wobble */ +MochiKit.Visual.Transitions.wobble = function (pos) { + return 0.5 - Math.cos(9*pos*Math.PI)/2; +}; + +/** @id MochiKit.Visual.Transitions.pulse */ +MochiKit.Visual.Transitions.pulse = function (pos, pulses) { + if (pulses) { + pos *= 2 * pulses; + } else { + pos *= 10; + } + var decimals = pos - Math.floor(pos); + return (Math.floor(pos) % 2 == 0) ? decimals : 1 - decimals; +}; + +/** @id MochiKit.Visual.Transitions.parabolic */ +MochiKit.Visual.Transitions.parabolic = function (pos) { + return pos * pos; +}; + +/** @id MochiKit.Visual.Transitions.none */ +MochiKit.Visual.Transitions.none = function (pos) { + return 0; +}; + +/** @id MochiKit.Visual.Transitions.full */ +MochiKit.Visual.Transitions.full = function (pos) { + return 1; +}; + +/*** + +Core effects + +***/ + +MochiKit.Visual.ScopedQueue = function () { + var cls = arguments.callee; + if (!(this instanceof cls)) { + return new cls(); + } + this.__init__(); +}; + +MochiKit.Base.update(MochiKit.Visual.ScopedQueue.prototype, { + __init__: function () { + this.effects = []; + this.interval = null; + }, + + /** @id MochiKit.Visual.ScopedQueue.prototype.add */ + add: function (effect) { + var timestamp = new Date().getTime(); + + var position = (typeof(effect.options.queue) == 'string') ? + effect.options.queue : effect.options.queue.position; + + var ma = MochiKit.Base.map; + switch (position) { + case 'front': + // move unstarted effects after this effect + ma(function (e) { + if (e.state == 'idle') { + e.startOn += effect.finishOn; + e.finishOn += effect.finishOn; + } + }, this.effects); + break; + case 'end': + var finish; + // start effect after last queued effect has finished + ma(function (e) { + var i = e.finishOn; + if (i >= (finish || i)) { + finish = i; + } + }, this.effects); + timestamp = finish || timestamp; + break; + case 'break': + ma(function (e) { + e.finalize(); + }, this.effects); + break; + } + + effect.startOn += timestamp; + effect.finishOn += timestamp; + if (!effect.options.queue.limit || + this.effects.length < effect.options.queue.limit) { + this.effects.push(effect); + } + + if (!this.interval) { + this.interval = this.startLoop(MochiKit.Base.bind(this.loop, this), + 40); + } + }, + + /** @id MochiKit.Visual.ScopedQueue.prototype.startLoop */ + startLoop: function (func, interval) { + return setInterval(func, interval); + }, + + /** @id MochiKit.Visual.ScopedQueue.prototype.remove */ + remove: function (effect) { + this.effects = MochiKit.Base.filter(function (e) { + return e != effect; + }, this.effects); + if (!this.effects.length) { + this.stopLoop(this.interval); + this.interval = null; + } + }, + + /** @id MochiKit.Visual.ScopedQueue.prototype.stopLoop */ + stopLoop: function (interval) { + clearInterval(interval); + }, + + /** @id MochiKit.Visual.ScopedQueue.prototype.loop */ + loop: function () { + var timePos = new Date().getTime(); + MochiKit.Base.map(function (effect) { + effect.loop(timePos); + }, this.effects); + } +}); + +MochiKit.Visual.Queues = { + instances: {}, + + get: function (queueName) { + if (typeof(queueName) != 'string') { + return queueName; + } + + if (!this.instances[queueName]) { + this.instances[queueName] = new MochiKit.Visual.ScopedQueue(); + } + return this.instances[queueName]; + } +}; + +MochiKit.Visual.Queue = MochiKit.Visual.Queues.get('global'); + +MochiKit.Visual.DefaultOptions = { + transition: MochiKit.Visual.Transitions.sinoidal, + duration: 1.0, // seconds + fps: 25.0, // max. 25fps due to MochiKit.Visual.Queue implementation + sync: false, // true for combining + from: 0.0, + to: 1.0, + delay: 0.0, + queue: 'parallel' +}; + +MochiKit.Visual.Base = function () {}; + +MochiKit.Visual.Base.prototype = { + /*** + + Basic class for all Effects. Define a looping mechanism called for each step + of an effect. Don't instantiate it, only subclass it. + + ***/ + + __class__ : MochiKit.Visual.Base, + + /** @id MochiKit.Visual.Base.prototype.start */ + start: function (options) { + var v = MochiKit.Visual; + this.options = MochiKit.Base.setdefault(options, + v.DefaultOptions); + this.currentFrame = 0; + this.state = 'idle'; + this.startOn = this.options.delay*1000; + this.finishOn = this.startOn + (this.options.duration*1000); + this.event('beforeStart'); + if (!this.options.sync) { + v.Queues.get(typeof(this.options.queue) == 'string' ? + 'global' : this.options.queue.scope).add(this); + } + }, + + /** @id MochiKit.Visual.Base.prototype.loop */ + loop: function (timePos) { + if (timePos >= this.startOn) { + if (timePos >= this.finishOn) { + return this.finalize(); + } + var pos = (timePos - this.startOn) / (this.finishOn - this.startOn); + var frame = + Math.round(pos * this.options.fps * this.options.duration); + if (frame > this.currentFrame) { + this.render(pos); + this.currentFrame = frame; + } + } + }, + + /** @id MochiKit.Visual.Base.prototype.render */ + render: function (pos) { + if (this.state == 'idle') { + this.state = 'running'; + this.event('beforeSetup'); + this.setup(); + this.event('afterSetup'); + } + if (this.state == 'running') { + if (this.options.transition) { + pos = this.options.transition(pos); + } + pos *= (this.options.to - this.options.from); + pos += this.options.from; + this.event('beforeUpdate'); + this.update(pos); + this.event('afterUpdate'); + } + }, + + /** @id MochiKit.Visual.Base.prototype.cancel */ + cancel: function () { + if (!this.options.sync) { + MochiKit.Visual.Queues.get(typeof(this.options.queue) == 'string' ? + 'global' : this.options.queue.scope).remove(this); + } + this.state = 'finished'; + }, + + /** @id MochiKit.Visual.Base.prototype.finalize */ + finalize: function () { + this.render(1.0); + this.cancel(); + this.event('beforeFinish'); + this.finish(); + this.event('afterFinish'); + }, + + setup: function () { + }, + + finish: function () { + }, + + update: function (position) { + }, + + /** @id MochiKit.Visual.Base.prototype.event */ + event: function (eventName) { + if (this.options[eventName + 'Internal']) { + this.options[eventName + 'Internal'](this); + } + if (this.options[eventName]) { + this.options[eventName](this); + } + }, + + /** @id MochiKit.Visual.Base.prototype.repr */ + repr: function () { + return '[' + this.__class__.NAME + ', options:' + + MochiKit.Base.repr(this.options) + ']'; + } +}; + +/** @id MochiKit.Visual.Parallel */ +MochiKit.Visual.Parallel = function (effects, options) { + var cls = arguments.callee; + if (!(this instanceof cls)) { + return new cls(effects, options); + } + + this.__init__(effects, options); +}; + +MochiKit.Visual.Parallel.prototype = new MochiKit.Visual.Base(); + +MochiKit.Base.update(MochiKit.Visual.Parallel.prototype, { + /*** + + Run multiple effects at the same time. + + ***/ + + __class__ : MochiKit.Visual.Parallel, + + __init__: function (effects, options) { + this.effects = effects || []; + this.start(options); + }, + + /** @id MochiKit.Visual.Parallel.prototype.update */ + update: function (position) { + MochiKit.Base.map(function (effect) { + effect.render(position); + }, this.effects); + }, + + /** @id MochiKit.Visual.Parallel.prototype.finish */ + finish: function () { + MochiKit.Base.map(function (effect) { + effect.finalize(); + }, this.effects); + } +}); + +/** @id MochiKit.Visual.Sequence */ +MochiKit.Visual.Sequence = function (effects, options) { + var cls = arguments.callee; + if (!(this instanceof cls)) { + return new cls(effects, options); + } + this.__init__(effects, options); +}; + +MochiKit.Visual.Sequence.prototype = new MochiKit.Visual.Base(); + +MochiKit.Base.update(MochiKit.Visual.Sequence.prototype, { + + __class__ : MochiKit.Visual.Sequence, + + __init__: function (effects, options) { + var defs = { transition: MochiKit.Visual.Transitions.linear, + duration: 0 }; + this.effects = effects || []; + MochiKit.Base.map(function (effect) { + defs.duration += effect.options.duration; + }, this.effects); + MochiKit.Base.setdefault(options, defs); + this.start(options); + }, + + /** @id MochiKit.Visual.Sequence.prototype.update */ + update: function (position) { + var time = position * this.options.duration; + for (var i = 0; i < this.effects.length; i++) { + var effect = this.effects[i]; + if (time <= effect.options.duration) { + effect.render(time / effect.options.duration); + break; + } else { + time -= effect.options.duration; + } + } + }, + + /** @id MochiKit.Visual.Sequence.prototype.finish */ + finish: function () { + MochiKit.Base.map(function (effect) { + effect.finalize(); + }, this.effects); + } +}); + +/** @id MochiKit.Visual.Opacity */ +MochiKit.Visual.Opacity = function (element, options) { + var cls = arguments.callee; + if (!(this instanceof cls)) { + return new cls(element, options); + } + this.__init__(element, options); +}; + +MochiKit.Visual.Opacity.prototype = new MochiKit.Visual.Base(); + +MochiKit.Base.update(MochiKit.Visual.Opacity.prototype, { + /*** + + Change the opacity of an element. + + @param options: 'from' and 'to' change the starting and ending opacities. + Must be between 0.0 and 1.0. Default to current opacity and 1.0. + + ***/ + + __class__ : MochiKit.Visual.Opacity, + + __init__: function (element, /* optional */options) { + var b = MochiKit.Base; + var s = MochiKit.Style; + this.element = MochiKit.DOM.getElement(element); + // make this work on IE on elements without 'layout' + if (this.element.currentStyle && + (!this.element.currentStyle.hasLayout)) { + s.setStyle(this.element, {zoom: 1}); + } + options = b.update({ + from: s.getStyle(this.element, 'opacity') || 0.0, + to: 1.0 + }, options); + this.start(options); + }, + + /** @id MochiKit.Visual.Opacity.prototype.update */ + update: function (position) { + MochiKit.Style.setStyle(this.element, {'opacity': position}); + } +}); + +/** @id MochiKit.Visual.Move.prototype */ +MochiKit.Visual.Move = function (element, options) { + var cls = arguments.callee; + if (!(this instanceof cls)) { + return new cls(element, options); + } + this.__init__(element, options); +}; + +MochiKit.Visual.Move.prototype = new MochiKit.Visual.Base(); + +MochiKit.Base.update(MochiKit.Visual.Move.prototype, { + /*** + + Move an element between its current position to a defined position + + @param options: 'x' and 'y' for final positions, default to 0, 0. + + ***/ + + __class__ : MochiKit.Visual.Move, + + __init__: function (element, /* optional */options) { + this.element = MochiKit.DOM.getElement(element); + options = MochiKit.Base.update({ + x: 0, + y: 0, + mode: 'relative' + }, options); + this.start(options); + }, + + /** @id MochiKit.Visual.Move.prototype.setup */ + setup: function () { + // Bug in Opera: Opera returns the 'real' position of a static element + // or relative element that does not have top/left explicitly set. + // ==> Always set top and left for position relative elements in your + // stylesheets (to 0 if you do not need them) + MochiKit.Style.makePositioned(this.element); + + var s = this.element.style; + var originalVisibility = s.visibility; + var originalDisplay = s.display; + if (originalDisplay == 'none') { + s.visibility = 'hidden'; + s.display = ''; + } + + this.originalLeft = parseFloat(MochiKit.Style.getStyle(this.element, 'left') || '0'); + this.originalTop = parseFloat(MochiKit.Style.getStyle(this.element, 'top') || '0'); + + if (this.options.mode == 'absolute') { + // absolute movement, so we need to calc deltaX and deltaY + this.options.x -= this.originalLeft; + this.options.y -= this.originalTop; + } + if (originalDisplay == 'none') { + s.visibility = originalVisibility; + s.display = originalDisplay; + } + }, + + /** @id MochiKit.Visual.Move.prototype.update */ + update: function (position) { + MochiKit.Style.setStyle(this.element, { + left: Math.round(this.options.x * position + this.originalLeft) + 'px', + top: Math.round(this.options.y * position + this.originalTop) + 'px' + }); + } +}); + +/** @id MochiKit.Visual.Scale */ +MochiKit.Visual.Scale = function (element, percent, options) { + var cls = arguments.callee; + if (!(this instanceof cls)) { + return new cls(element, percent, options); + } + this.__init__(element, percent, options); +}; + +MochiKit.Visual.Scale.prototype = new MochiKit.Visual.Base(); + +MochiKit.Base.update(MochiKit.Visual.Scale.prototype, { + /*** + + Change the size of an element. + + @param percent: final_size = percent*original_size + + @param options: several options changing scale behaviour + + ***/ + + __class__ : MochiKit.Visual.Scale, + + __init__: function (element, percent, /* optional */options) { + this.element = MochiKit.DOM.getElement(element); + options = MochiKit.Base.update({ + scaleX: true, + scaleY: true, + scaleContent: true, + scaleFromCenter: false, + scaleMode: 'box', // 'box' or 'contents' or {} with provided values + scaleFrom: 100.0, + scaleTo: percent + }, options); + this.start(options); + }, + + /** @id MochiKit.Visual.Scale.prototype.setup */ + setup: function () { + this.restoreAfterFinish = this.options.restoreAfterFinish || false; + this.elementPositioning = MochiKit.Style.getStyle(this.element, + 'position'); + + var ma = MochiKit.Base.map; + var b = MochiKit.Base.bind; + this.originalStyle = {}; + ma(b(function (k) { + this.originalStyle[k] = this.element.style[k]; + }, this), ['top', 'left', 'width', 'height', 'fontSize']); + + this.originalTop = this.element.offsetTop; + this.originalLeft = this.element.offsetLeft; + + var fontSize = MochiKit.Style.getStyle(this.element, + 'font-size') || '100%'; + ma(b(function (fontSizeType) { + if (fontSize.indexOf(fontSizeType) > 0) { + this.fontSize = parseFloat(fontSize); + this.fontSizeType = fontSizeType; + } + }, this), ['em', 'px', '%']); + + this.factor = (this.options.scaleTo - this.options.scaleFrom)/100; + + if (/^content/.test(this.options.scaleMode)) { + this.dims = [this.element.scrollHeight, this.element.scrollWidth]; + } else if (this.options.scaleMode == 'box') { + this.dims = [this.element.offsetHeight, this.element.offsetWidth]; + } else { + this.dims = [this.options.scaleMode.originalHeight, + this.options.scaleMode.originalWidth]; + } + }, + + /** @id MochiKit.Visual.Scale.prototype.update */ + update: function (position) { + var currentScale = (this.options.scaleFrom/100.0) + + (this.factor * position); + if (this.options.scaleContent && this.fontSize) { + MochiKit.Style.setStyle(this.element, { + fontSize: this.fontSize * currentScale + this.fontSizeType + }); + } + this.setDimensions(this.dims[0] * currentScale, + this.dims[1] * currentScale); + }, + + /** @id MochiKit.Visual.Scale.prototype.finish */ + finish: function () { + if (this.restoreAfterFinish) { + MochiKit.Style.setStyle(this.element, this.originalStyle); + } + }, + + /** @id MochiKit.Visual.Scale.prototype.setDimensions */ + setDimensions: function (height, width) { + var d = {}; + var r = Math.round; + if (/MSIE/.test(navigator.userAgent)) { + r = Math.ceil; + } + if (this.options.scaleX) { + d.width = r(width) + 'px'; + } + if (this.options.scaleY) { + d.height = r(height) + 'px'; + } + if (this.options.scaleFromCenter) { + var topd = (height - this.dims[0])/2; + var leftd = (width - this.dims[1])/2; + if (this.elementPositioning == 'absolute') { + if (this.options.scaleY) { + d.top = this.originalTop - topd + 'px'; + } + if (this.options.scaleX) { + d.left = this.originalLeft - leftd + 'px'; + } + } else { + if (this.options.scaleY) { + d.top = -topd + 'px'; + } + if (this.options.scaleX) { + d.left = -leftd + 'px'; + } + } + } + MochiKit.Style.setStyle(this.element, d); + } +}); + +/** @id MochiKit.Visual.Highlight */ +MochiKit.Visual.Highlight = function (element, options) { + var cls = arguments.callee; + if (!(this instanceof cls)) { + return new cls(element, options); + } + this.__init__(element, options); +}; + +MochiKit.Visual.Highlight.prototype = new MochiKit.Visual.Base(); + +MochiKit.Base.update(MochiKit.Visual.Highlight.prototype, { + /*** + + Highlight an item of the page. + + @param options: 'startcolor' for choosing highlighting color, default + to '#ffff99'. + + ***/ + + __class__ : MochiKit.Visual.Highlight, + + __init__: function (element, /* optional */options) { + this.element = MochiKit.DOM.getElement(element); + options = MochiKit.Base.update({ + startcolor: '#ffff99' + }, options); + this.start(options); + }, + + /** @id MochiKit.Visual.Highlight.prototype.setup */ + setup: function () { + var b = MochiKit.Base; + var s = MochiKit.Style; + // Prevent executing on elements not in the layout flow + if (s.getStyle(this.element, 'display') == 'none') { + this.cancel(); + return; + } + // Disable background image during the effect + this.oldStyle = { + backgroundImage: s.getStyle(this.element, 'background-image') + }; + s.setStyle(this.element, { + backgroundImage: 'none' + }); + + if (!this.options.endcolor) { + this.options.endcolor = + MochiKit.Color.Color.fromBackground(this.element).toHexString(); + } + if (b.isUndefinedOrNull(this.options.restorecolor)) { + this.options.restorecolor = s.getStyle(this.element, + 'background-color'); + } + // init color calculations + this._base = b.map(b.bind(function (i) { + return parseInt( + this.options.startcolor.slice(i*2 + 1, i*2 + 3), 16); + }, this), [0, 1, 2]); + this._delta = b.map(b.bind(function (i) { + return parseInt(this.options.endcolor.slice(i*2 + 1, i*2 + 3), 16) + - this._base[i]; + }, this), [0, 1, 2]); + }, + + /** @id MochiKit.Visual.Highlight.prototype.update */ + update: function (position) { + var m = '#'; + MochiKit.Base.map(MochiKit.Base.bind(function (i) { + m += MochiKit.Color.toColorPart(Math.round(this._base[i] + + this._delta[i]*position)); + }, this), [0, 1, 2]); + MochiKit.Style.setStyle(this.element, { + backgroundColor: m + }); + }, + + /** @id MochiKit.Visual.Highlight.prototype.finish */ + finish: function () { + MochiKit.Style.setStyle(this.element, + MochiKit.Base.update(this.oldStyle, { + backgroundColor: this.options.restorecolor + })); + } +}); + +/** @id MochiKit.Visual.ScrollTo */ +MochiKit.Visual.ScrollTo = function (element, options) { + var cls = arguments.callee; + if (!(this instanceof cls)) { + return new cls(element, options); + } + this.__init__(element, options); +}; + +MochiKit.Visual.ScrollTo.prototype = new MochiKit.Visual.Base(); + +MochiKit.Base.update(MochiKit.Visual.ScrollTo.prototype, { + /*** + + Scroll to an element in the page. + + ***/ + + __class__ : MochiKit.Visual.ScrollTo, + + __init__: function (element, /* optional */options) { + this.element = MochiKit.DOM.getElement(element); + this.start(options); + }, + + /** @id MochiKit.Visual.ScrollTo.prototype.setup */ + setup: function () { + var p = MochiKit.Position; + p.prepare(); + var offsets = p.cumulativeOffset(this.element); + if (this.options.offset) { + offsets.y += this.options.offset; + } + var max; + if (window.innerHeight) { + max = window.innerHeight - window.height; + } else if (document.documentElement && + document.documentElement.clientHeight) { + max = document.documentElement.clientHeight - + document.body.scrollHeight; + } else if (document.body) { + max = document.body.clientHeight - document.body.scrollHeight; + } + this.scrollStart = p.windowOffset.y; + this.delta = (offsets.y > max ? max : offsets.y) - this.scrollStart; + }, + + /** @id MochiKit.Visual.ScrollTo.prototype.update */ + update: function (position) { + var p = MochiKit.Position; + p.prepare(); + window.scrollTo(p.windowOffset.x, this.scrollStart + (position * this.delta)); + } +}); + +MochiKit.Visual.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/; + +MochiKit.Visual.Morph = function (element, options) { + var cls = arguments.callee; + if (!(this instanceof cls)) { + return new cls(element, options); + } + this.__init__(element, options); +}; + +MochiKit.Visual.Morph.prototype = new MochiKit.Visual.Base(); + +MochiKit.Base.update(MochiKit.Visual.Morph.prototype, { + /*** + + Morph effect: make a transformation from current style to the given style, + automatically making a transition between the two. + + ***/ + + __class__ : MochiKit.Visual.Morph, + + __init__: function (element, /* optional */options) { + this.element = MochiKit.DOM.getElement(element); + this.start(options); + }, + + /** @id MochiKit.Visual.Morph.prototype.setup */ + setup: function () { + var b = MochiKit.Base; + var style = this.options.style; + this.styleStart = {}; + this.styleEnd = {}; + this.units = {}; + var value, unit; + for (var s in style) { + value = style[s]; + s = b.camelize(s); + if (MochiKit.Visual.CSS_LENGTH.test(value)) { + var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/); + value = parseFloat(components[1]); + unit = (components.length == 3) ? components[2] : null; + this.styleEnd[s] = value; + this.units[s] = unit; + value = MochiKit.Style.getStyle(this.element, s); + components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/); + value = parseFloat(components[1]); + this.styleStart[s] = value; + } else if (/[Cc]olor$/.test(s)) { + var c = MochiKit.Color.Color; + value = c.fromString(value); + if (value) { + this.units[s] = "color"; + this.styleEnd[s] = value.toHexString(); + value = MochiKit.Style.getStyle(this.element, s); + this.styleStart[s] = c.fromString(value).toHexString(); + + this.styleStart[s] = b.map(b.bind(function (i) { + return parseInt( + this.styleStart[s].slice(i*2 + 1, i*2 + 3), 16); + }, this), [0, 1, 2]); + this.styleEnd[s] = b.map(b.bind(function (i) { + return parseInt( + this.styleEnd[s].slice(i*2 + 1, i*2 + 3), 16); + }, this), [0, 1, 2]); + } + } else { + // For non-length & non-color properties, we just set the value + this.element.style[s] = value; + } + } + }, + + /** @id MochiKit.Visual.Morph.prototype.update */ + update: function (position) { + var value; + for (var s in this.styleStart) { + if (this.units[s] == "color") { + var m = '#'; + var start = this.styleStart[s]; + var end = this.styleEnd[s]; + MochiKit.Base.map(MochiKit.Base.bind(function (i) { + m += MochiKit.Color.toColorPart(Math.round(start[i] + + (end[i] - start[i])*position)); + }, this), [0, 1, 2]); + this.element.style[s] = m; + } else { + value = this.styleStart[s] + Math.round((this.styleEnd[s] - this.styleStart[s]) * position * 1000) / 1000 + this.units[s]; + this.element.style[s] = value; + } + } + } +}); + +/*** + +Combination effects. + +***/ + +/** @id MochiKit.Visual.fade */ +MochiKit.Visual.fade = function (element, /* optional */ options) { + /*** + + Fade a given element: change its opacity and hide it in the end. + + @param options: 'to' and 'from' to change opacity. + + ***/ + var s = MochiKit.Style; + var oldOpacity = s.getStyle(element, 'opacity'); + options = MochiKit.Base.update({ + from: s.getStyle(element, 'opacity') || 1.0, + to: 0.0, + afterFinishInternal: function (effect) { + if (effect.options.to !== 0) { + return; + } + s.hideElement(effect.element); + s.setStyle(effect.element, {'opacity': oldOpacity}); + } + }, options); + return new MochiKit.Visual.Opacity(element, options); +}; + +/** @id MochiKit.Visual.appear */ +MochiKit.Visual.appear = function (element, /* optional */ options) { + /*** + + Make an element appear. + + @param options: 'to' and 'from' to change opacity. + + ***/ + var s = MochiKit.Style; + var v = MochiKit.Visual; + options = MochiKit.Base.update({ + from: (s.getStyle(element, 'display') == 'none' ? 0.0 : + s.getStyle(element, 'opacity') || 0.0), + to: 1.0, + // force Safari to render floated elements properly + afterFinishInternal: function (effect) { + v.forceRerendering(effect.element); + }, + beforeSetupInternal: function (effect) { + s.setStyle(effect.element, {'opacity': effect.options.from}); + s.showElement(effect.element); + } + }, options); + return new v.Opacity(element, options); +}; + +/** @id MochiKit.Visual.puff */ +MochiKit.Visual.puff = function (element, /* optional */ options) { + /*** + + 'Puff' an element: grow it to double size, fading it and make it hidden. + + ***/ + var s = MochiKit.Style; + var v = MochiKit.Visual; + element = MochiKit.DOM.getElement(element); + var elementDimensions = MochiKit.Style.getElementDimensions(element, true); + var oldStyle = { + position: s.getStyle(element, 'position'), + top: element.style.top, + left: element.style.left, + width: element.style.width, + height: element.style.height, + opacity: s.getStyle(element, 'opacity') + }; + options = MochiKit.Base.update({ + beforeSetupInternal: function (effect) { + MochiKit.Position.absolutize(effect.effects[0].element); + }, + afterFinishInternal: function (effect) { + s.hideElement(effect.effects[0].element); + s.setStyle(effect.effects[0].element, oldStyle); + }, + scaleContent: true, + scaleFromCenter: true + }, options); + return new v.Parallel( + [new v.Scale(element, 200, + {sync: true, scaleFromCenter: options.scaleFromCenter, + scaleMode: {originalHeight: elementDimensions.h, + originalWidth: elementDimensions.w}, + scaleContent: options.scaleContent, restoreAfterFinish: true}), + new v.Opacity(element, {sync: true, to: 0.0 })], + options); +}; + +/** @id MochiKit.Visual.blindUp */ +MochiKit.Visual.blindUp = function (element, /* optional */ options) { + /*** + + Blind an element up: change its vertical size to 0. + + ***/ + var d = MochiKit.DOM; + var s = MochiKit.Style; + element = d.getElement(element); + var elementDimensions = s.getElementDimensions(element, true); + var elemClip = s.makeClipping(element); + options = MochiKit.Base.update({ + scaleContent: false, + scaleX: false, + scaleMode: {originalHeight: elementDimensions.h, + originalWidth: elementDimensions.w}, + restoreAfterFinish: true, + afterFinishInternal: function (effect) { + s.hideElement(effect.element); + s.undoClipping(effect.element, elemClip); + } + }, options); + return new MochiKit.Visual.Scale(element, 0, options); +}; + +/** @id MochiKit.Visual.blindDown */ +MochiKit.Visual.blindDown = function (element, /* optional */ options) { + /*** + + Blind an element down: restore its vertical size. + + ***/ + var d = MochiKit.DOM; + var s = MochiKit.Style; + element = d.getElement(element); + var elementDimensions = s.getElementDimensions(element, true); + var elemClip; + options = MochiKit.Base.update({ + scaleContent: false, + scaleX: false, + scaleFrom: 0, + scaleMode: {originalHeight: elementDimensions.h, + originalWidth: elementDimensions.w}, + restoreAfterFinish: true, + afterSetupInternal: function (effect) { + elemClip = s.makeClipping(effect.element); + s.setStyle(effect.element, {height: '0px'}); + s.showElement(effect.element); + }, + afterFinishInternal: function (effect) { + s.undoClipping(effect.element, elemClip); + } + }, options); + return new MochiKit.Visual.Scale(element, 100, options); +}; + +/** @id MochiKit.Visual.switchOff */ +MochiKit.Visual.switchOff = function (element, /* optional */ options) { + /*** + + Apply a switch-off-like effect. + + ***/ + var d = MochiKit.DOM; + var s = MochiKit.Style; + element = d.getElement(element); + var elementDimensions = s.getElementDimensions(element, true); + var oldOpacity = s.getStyle(element, 'opacity'); + var elemClip; + options = MochiKit.Base.update({ + duration: 0.7, + restoreAfterFinish: true, + beforeSetupInternal: function (effect) { + s.makePositioned(element); + elemClip = s.makeClipping(element); + }, + afterFinishInternal: function (effect) { + s.hideElement(element); + s.undoClipping(element, elemClip); + s.undoPositioned(element); + s.setStyle(element, {'opacity': oldOpacity}); + } + }, options); + var v = MochiKit.Visual; + return new v.Sequence( + [new v.appear(element, + { sync: true, duration: 0.57 * options.duration, + from: 0, transition: v.Transitions.flicker }), + new v.Scale(element, 1, + { sync: true, duration: 0.43 * options.duration, + scaleFromCenter: true, scaleX: false, + scaleMode: {originalHeight: elementDimensions.h, + originalWidth: elementDimensions.w}, + scaleContent: false, restoreAfterFinish: true })], + options); +}; + +/** @id MochiKit.Visual.dropOut */ +MochiKit.Visual.dropOut = function (element, /* optional */ options) { + /*** + + Make an element fall and disappear. + + ***/ + var d = MochiKit.DOM; + var s = MochiKit.Style; + element = d.getElement(element); + var oldStyle = { + top: s.getStyle(element, 'top'), + left: s.getStyle(element, 'left'), + opacity: s.getStyle(element, 'opacity') + }; + + options = MochiKit.Base.update({ + duration: 0.5, + distance: 100, + beforeSetupInternal: function (effect) { + s.makePositioned(effect.effects[0].element); + }, + afterFinishInternal: function (effect) { + s.hideElement(effect.effects[0].element); + s.undoPositioned(effect.effects[0].element); + s.setStyle(effect.effects[0].element, oldStyle); + } + }, options); + var v = MochiKit.Visual; + return new v.Parallel( + [new v.Move(element, {x: 0, y: options.distance, sync: true}), + new v.Opacity(element, {sync: true, to: 0.0})], + options); +}; + +/** @id MochiKit.Visual.shake */ +MochiKit.Visual.shake = function (element, /* optional */ options) { + /*** + + Move an element from left to right several times. + + ***/ + var d = MochiKit.DOM; + var v = MochiKit.Visual; + var s = MochiKit.Style; + element = d.getElement(element); + var oldStyle = { + top: s.getStyle(element, 'top'), + left: s.getStyle(element, 'left') + }; + options = MochiKit.Base.update({ + duration: 0.5, + afterFinishInternal: function (effect) { + s.undoPositioned(element); + s.setStyle(element, oldStyle); + } + }, options); + return new v.Sequence( + [new v.Move(element, { sync: true, duration: 0.1 * options.duration, + x: 20, y: 0 }), + new v.Move(element, { sync: true, duration: 0.2 * options.duration, + x: -40, y: 0 }), + new v.Move(element, { sync: true, duration: 0.2 * options.duration, + x: 40, y: 0 }), + new v.Move(element, { sync: true, duration: 0.2 * options.duration, + x: -40, y: 0 }), + new v.Move(element, { sync: true, duration: 0.2 * options.duration, + x: 40, y: 0 }), + new v.Move(element, { sync: true, duration: 0.1 * options.duration, + x: -20, y: 0 })], + options); +}; + +/** @id MochiKit.Visual.slideDown */ +MochiKit.Visual.slideDown = function (element, /* optional */ options) { + /*** + + Slide an element down. + It needs to have the content of the element wrapped in a container + element with fixed height. + + ***/ + var d = MochiKit.DOM; + var b = MochiKit.Base; + var s = MochiKit.Style; + element = d.getElement(element); + if (!element.firstChild) { + throw new Error("MochiKit.Visual.slideDown must be used on a element with a child"); + } + d.removeEmptyTextNodes(element); + var oldInnerBottom = s.getStyle(element.firstChild, 'bottom') || 0; + var elementDimensions = s.getElementDimensions(element, true); + var elemClip; + options = b.update({ + scaleContent: false, + scaleX: false, + scaleFrom: 0, + scaleMode: {originalHeight: elementDimensions.h, + originalWidth: elementDimensions.w}, + restoreAfterFinish: true, + afterSetupInternal: function (effect) { + s.makePositioned(effect.element); + s.makePositioned(effect.element.firstChild); + if (/Opera/.test(navigator.userAgent)) { + s.setStyle(effect.element, {top: ''}); + } + elemClip = s.makeClipping(effect.element); + s.setStyle(effect.element, {height: '0px'}); + s.showElement(effect.element); + }, + afterUpdateInternal: function (effect) { + var elementDimensions = s.getElementDimensions(effect.element, true); + s.setStyle(effect.element.firstChild, + {bottom: (effect.dims[0] - elementDimensions.h) + 'px'}); + }, + afterFinishInternal: function (effect) { + s.undoClipping(effect.element, elemClip); + // IE will crash if child is undoPositioned first + if (/MSIE/.test(navigator.userAgent)) { + s.undoPositioned(effect.element); + s.undoPositioned(effect.element.firstChild); + } else { + s.undoPositioned(effect.element.firstChild); + s.undoPositioned(effect.element); + } + s.setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); + } + }, options); + + return new MochiKit.Visual.Scale(element, 100, options); +}; + +/** @id MochiKit.Visual.slideUp */ +MochiKit.Visual.slideUp = function (element, /* optional */ options) { + /*** + + Slide an element up. + It needs to have the content of the element wrapped in a container + element with fixed height. + + ***/ + var d = MochiKit.DOM; + var b = MochiKit.Base; + var s = MochiKit.Style; + element = d.getElement(element); + if (!element.firstChild) { + throw new Error("MochiKit.Visual.slideUp must be used on a element with a child"); + } + d.removeEmptyTextNodes(element); + var oldInnerBottom = s.getStyle(element.firstChild, 'bottom'); + var elementDimensions = s.getElementDimensions(element, true); + var elemClip; + options = b.update({ + scaleContent: false, + scaleX: false, + scaleMode: {originalHeight: elementDimensions.h, + originalWidth: elementDimensions.w}, + scaleFrom: 100, + restoreAfterFinish: true, + beforeStartInternal: function (effect) { + s.makePositioned(effect.element); + s.makePositioned(effect.element.firstChild); + if (/Opera/.test(navigator.userAgent)) { + s.setStyle(effect.element, {top: ''}); + } + elemClip = s.makeClipping(effect.element); + s.showElement(effect.element); + }, + afterUpdateInternal: function (effect) { + var elementDimensions = s.getElementDimensions(effect.element, true); + s.setStyle(effect.element.firstChild, + {bottom: (effect.dims[0] - elementDimensions.h) + 'px'}); + }, + afterFinishInternal: function (effect) { + s.hideElement(effect.element); + s.undoClipping(effect.element, elemClip); + s.undoPositioned(effect.element.firstChild); + s.undoPositioned(effect.element); + s.setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); + } + }, options); + return new MochiKit.Visual.Scale(element, 0, options); +}; + +// Bug in opera makes the TD containing this element expand for a instance +// after finish +/** @id MochiKit.Visual.squish */ +MochiKit.Visual.squish = function (element, /* optional */ options) { + /*** + + Reduce an element and make it disappear. + + ***/ + var d = MochiKit.DOM; + var b = MochiKit.Base; + var s = MochiKit.Style; + var elementDimensions = s.getElementDimensions(element, true); + var elemClip; + options = b.update({ + restoreAfterFinish: true, + scaleMode: {originalHeight: elementDimensions.w, + originalWidth: elementDimensions.h}, + beforeSetupInternal: function (effect) { + elemClip = s.makeClipping(effect.element); + }, + afterFinishInternal: function (effect) { + s.hideElement(effect.element); + s.undoClipping(effect.element, elemClip); + } + }, options); + + return new MochiKit.Visual.Scale(element, /Opera/.test(navigator.userAgent) ? 1 : 0, options); +}; + +/** @id MochiKit.Visual.grow */ +MochiKit.Visual.grow = function (element, /* optional */ options) { + /*** + + Grow an element to its original size. Make it zero-sized before + if necessary. + + ***/ + var d = MochiKit.DOM; + var v = MochiKit.Visual; + var s = MochiKit.Style; + element = d.getElement(element); + options = MochiKit.Base.update({ + direction: 'center', + moveTransition: v.Transitions.sinoidal, + scaleTransition: v.Transitions.sinoidal, + opacityTransition: v.Transitions.full, + scaleContent: true, + scaleFromCenter: false + }, options); + var oldStyle = { + top: element.style.top, + left: element.style.left, + height: element.style.height, + width: element.style.width, + opacity: s.getStyle(element, 'opacity') + }; + var dims = s.getElementDimensions(element, true); + var initialMoveX, initialMoveY; + var moveX, moveY; + + switch (options.direction) { + case 'top-left': + initialMoveX = initialMoveY = moveX = moveY = 0; + break; + case 'top-right': + initialMoveX = dims.w; + initialMoveY = moveY = 0; + moveX = -dims.w; + break; + case 'bottom-left': + initialMoveX = moveX = 0; + initialMoveY = dims.h; + moveY = -dims.h; + break; + case 'bottom-right': + initialMoveX = dims.w; + initialMoveY = dims.h; + moveX = -dims.w; + moveY = -dims.h; + break; + case 'center': + initialMoveX = dims.w / 2; + initialMoveY = dims.h / 2; + moveX = -dims.w / 2; + moveY = -dims.h / 2; + break; + } + + var optionsParallel = MochiKit.Base.update({ + beforeSetupInternal: function (effect) { + s.setStyle(effect.effects[0].element, {height: '0px'}); + s.showElement(effect.effects[0].element); + }, + afterFinishInternal: function (effect) { + s.undoClipping(effect.effects[0].element); + s.undoPositioned(effect.effects[0].element); + s.setStyle(effect.effects[0].element, oldStyle); + } + }, options); + + return new v.Move(element, { + x: initialMoveX, + y: initialMoveY, + duration: 0.01, + beforeSetupInternal: function (effect) { + s.hideElement(effect.element); + s.makeClipping(effect.element); + s.makePositioned(effect.element); + }, + afterFinishInternal: function (effect) { + new v.Parallel( + [new v.Opacity(effect.element, { + sync: true, to: 1.0, from: 0.0, + transition: options.opacityTransition + }), + new v.Move(effect.element, { + x: moveX, y: moveY, sync: true, + transition: options.moveTransition + }), + new v.Scale(effect.element, 100, { + scaleMode: {originalHeight: dims.h, + originalWidth: dims.w}, + sync: true, + scaleFrom: /Opera/.test(navigator.userAgent) ? 1 : 0, + transition: options.scaleTransition, + scaleContent: options.scaleContent, + scaleFromCenter: options.scaleFromCenter, + restoreAfterFinish: true + }) + ], optionsParallel + ); + } + }); +}; + +/** @id MochiKit.Visual.shrink */ +MochiKit.Visual.shrink = function (element, /* optional */ options) { + /*** + + Shrink an element and make it disappear. + + ***/ + var d = MochiKit.DOM; + var v = MochiKit.Visual; + var s = MochiKit.Style; + element = d.getElement(element); + options = MochiKit.Base.update({ + direction: 'center', + moveTransition: v.Transitions.sinoidal, + scaleTransition: v.Transitions.sinoidal, + opacityTransition: v.Transitions.none, + scaleContent: true, + scaleFromCenter: false + }, options); + var oldStyle = { + top: element.style.top, + left: element.style.left, + height: element.style.height, + width: element.style.width, + opacity: s.getStyle(element, 'opacity') + }; + + var dims = s.getElementDimensions(element, true); + var moveX, moveY; + + switch (options.direction) { + case 'top-left': + moveX = moveY = 0; + break; + case 'top-right': + moveX = dims.w; + moveY = 0; + break; + case 'bottom-left': + moveX = 0; + moveY = dims.h; + break; + case 'bottom-right': + moveX = dims.w; + moveY = dims.h; + break; + case 'center': + moveX = dims.w / 2; + moveY = dims.h / 2; + break; + } + var elemClip; + + var optionsParallel = MochiKit.Base.update({ + beforeStartInternal: function (effect) { + s.makePositioned(effect.effects[0].element); + elemClip = s.makeClipping(effect.effects[0].element); + }, + afterFinishInternal: function (effect) { + s.hideElement(effect.effects[0].element); + s.undoClipping(effect.effects[0].element, elemClip); + s.undoPositioned(effect.effects[0].element); + s.setStyle(effect.effects[0].element, oldStyle); + } + }, options); + + return new v.Parallel( + [new v.Opacity(element, { + sync: true, to: 0.0, from: 1.0, + transition: options.opacityTransition + }), + new v.Scale(element, /Opera/.test(navigator.userAgent) ? 1 : 0, { + scaleMode: {originalHeight: dims.h, originalWidth: dims.w}, + sync: true, transition: options.scaleTransition, + scaleContent: options.scaleContent, + scaleFromCenter: options.scaleFromCenter, + restoreAfterFinish: true + }), + new v.Move(element, { + x: moveX, y: moveY, sync: true, transition: options.moveTransition + }) + ], optionsParallel + ); +}; + +/** @id MochiKit.Visual.pulsate */ +MochiKit.Visual.pulsate = function (element, /* optional */ options) { + /*** + + Pulse an element between appear/fade. + + ***/ + var d = MochiKit.DOM; + var v = MochiKit.Visual; + var b = MochiKit.Base; + var oldOpacity = MochiKit.Style.getStyle(element, 'opacity'); + options = b.update({ + duration: 3.0, + from: 0, + afterFinishInternal: function (effect) { + MochiKit.Style.setStyle(effect.element, {'opacity': oldOpacity}); + } + }, options); + var transition = options.transition || v.Transitions.sinoidal; + options.transition = function (pos) { + return transition(1 - v.Transitions.pulse(pos, options.pulses)); + }; + return new v.Opacity(element, options); +}; + +/** @id MochiKit.Visual.fold */ +MochiKit.Visual.fold = function (element, /* optional */ options) { + /*** + + Fold an element, first vertically, then horizontally. + + ***/ + var d = MochiKit.DOM; + var v = MochiKit.Visual; + var s = MochiKit.Style; + element = d.getElement(element); + var elementDimensions = s.getElementDimensions(element, true); + var oldStyle = { + top: element.style.top, + left: element.style.left, + width: element.style.width, + height: element.style.height + }; + var elemClip = s.makeClipping(element); + options = MochiKit.Base.update({ + scaleContent: false, + scaleX: false, + scaleMode: {originalHeight: elementDimensions.h, + originalWidth: elementDimensions.w}, + afterFinishInternal: function (effect) { + new v.Scale(element, 1, { + scaleContent: false, + scaleY: false, + scaleMode: {originalHeight: elementDimensions.h, + originalWidth: elementDimensions.w}, + afterFinishInternal: function (effect) { + s.hideElement(effect.element); + s.undoClipping(effect.element, elemClip); + s.setStyle(effect.element, oldStyle); + } + }); + } + }, options); + return new v.Scale(element, 5, options); +}; + + +// Compatibility with MochiKit 1.0 +MochiKit.Visual.Color = MochiKit.Color.Color; +MochiKit.Visual.getElementsComputedStyle = MochiKit.DOM.computedStyle; + +/* end of Rico adaptation */ + +MochiKit.Visual.__new__ = function () { + var m = MochiKit.Base; + + m.nameFunctions(this); + + this.EXPORT_TAGS = { + ":common": this.EXPORT, + ":all": m.concat(this.EXPORT, this.EXPORT_OK) + }; + +}; + +MochiKit.Visual.EXPORT = [ + "roundElement", + "roundClass", + "tagifyText", + "multiple", + "toggle", + "Parallel", + "Sequence", + "Opacity", + "Move", + "Scale", + "Highlight", + "ScrollTo", + "Morph", + "fade", + "appear", + "puff", + "blindUp", + "blindDown", + "switchOff", + "dropOut", + "shake", + "slideDown", + "slideUp", + "squish", + "grow", + "shrink", + "pulsate", + "fold" +]; + +MochiKit.Visual.EXPORT_OK = [ + "Base", + "PAIRS" +]; + +MochiKit.Visual.__new__(); + +MochiKit.Base._exportSymbols(this, MochiKit.Visual); diff --git a/static/MochiKit/__package__.js b/static/MochiKit/__package__.js new file mode 100644 index 0000000..8d644b1 --- /dev/null +++ b/static/MochiKit/__package__.js @@ -0,0 +1,18 @@ +dojo.kwCompoundRequire({ + "common": [ + "MochiKit.Base", + "MochiKit.Iter", + "MochiKit.Logging", + "MochiKit.DateTime", + "MochiKit.Format", + "MochiKit.Async", + "MochiKit.DOM", + "MochiKit.Style", + "MochiKit.LoggingPane", + "MochiKit.Color", + "MochiKit.Signal", + "MochiKit.Position", + "MochiKit.Visual" + ] +}); +dojo.provide("MochiKit.*"); diff --git a/static/arrow.gif b/static/arrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b91abd1cb36282e4856f86f8167a79dc664c99b GIT binary patch literal 462 zcmZ?wbhEHbWM|-Ec*f1}`0?W_SFY^aw{QRc{l9+wx^?T;@87@o?Afz-@809bkDoYk zf?*WUG6WQVvM@3*a5LzDECIy{1G{zucT+PrDCp%Yfa~Ed|Hy0Cg3nM!_ V!=xFLx+nEdoIJ6$y`_=C8UPT)ERp~K literal 0 HcmV?d00001 diff --git a/static/arrowsub.gif b/static/arrowsub.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b91abd1cb36282e4856f86f8167a79dc664c99b GIT binary patch literal 462 zcmZ?wbhEHbWM|-Ec*f1}`0?W_SFY^aw{QRc{l9+wx^?T;@87@o?Afz-@809bkDoYk zf?*WUG6WQVvM@3*a5LzDECIy{1G{zucT+PrDCp%Yfa~Ed|Hy0Cg3nM!_ V!=xFLx+nEdoIJ6$y`_=C8UPT)ERp~K literal 0 HcmV?d00001 diff --git a/static/arrowsub.png b/static/arrowsub.png new file mode 100644 index 0000000000000000000000000000000000000000..4040348c3cbbf25ad9341a16c56740c1c588b7fa GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c4!3HFg*81KCQnH>djv*DdlK=3t@CY2>P+L&5 kLqXYz(M4c2mxwXLj%eX;xxEU@fC?ErUHx3vIVCg!0QFWBu>b%7 literal 0 HcmV?d00001 diff --git a/static/file-icons.png b/static/file-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..58fdd60cc45db182ba86f7dfbd51bcdef5ea3a06 GIT binary patch literal 42702 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 li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.142857142857143em; + width: 2.142857142857143em; + top: 0.14285714285714285em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.8571428571428572em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: spin 2s infinite linear; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-o-keyframes spin { + 0% { + -o-transform: rotate(0deg); + } + 100% { + -o-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-asc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-desc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-reply-all:before { + content: "\f122"; +} +.fa-mail-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} diff --git a/static/geomarkers.js b/static/geomarkers.js new file mode 100644 index 0000000..fa58ff3 --- /dev/null +++ b/static/geomarkers.js @@ -0,0 +1,22 @@ +/** + * Created by ignace on 29-9-15. + */ + function addMarker(map, latlong, text) { + var ll = latlong.split(','); + var myLatlng = new google.maps.LatLng(ll[0],ll[1]); + var marker = new google.maps.Marker({ + position: myLatlng, + title: text + }); + marker.setMap(map); + } + function makeGoogleMap() { + + var mapOptions = { + center: new google.maps.LatLng(50,0), + zoom: 1, + mapTypeId: google.maps.MapTypeId.ROADMAP + }; + var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions); + addAllMarkers(map); + } \ No newline at end of file diff --git a/static/grids-responsive-min.css b/static/grids-responsive-min.css new file mode 100644 index 0000000..1df05db --- /dev/null +++ b/static/grids-responsive-min.css @@ -0,0 +1,7 @@ +/*! +Pure v0.6.0 +Copyright 2014 Yahoo! Inc. All rights reserved. +Licensed under the BSD License. +https://github.com/yahoo/pure/blob/master/LICENSE.md +*/ +@media screen and (min-width:35.5em){.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-1-2,.pure-u-sm-1-3,.pure-u-sm-2-3,.pure-u-sm-1-4,.pure-u-sm-3-4,.pure-u-sm-1-5,.pure-u-sm-2-5,.pure-u-sm-3-5,.pure-u-sm-4-5,.pure-u-sm-5-5,.pure-u-sm-1-6,.pure-u-sm-5-6,.pure-u-sm-1-8,.pure-u-sm-3-8,.pure-u-sm-5-8,.pure-u-sm-7-8,.pure-u-sm-1-12,.pure-u-sm-5-12,.pure-u-sm-7-12,.pure-u-sm-11-12,.pure-u-sm-1-24,.pure-u-sm-2-24,.pure-u-sm-3-24,.pure-u-sm-4-24,.pure-u-sm-5-24,.pure-u-sm-6-24,.pure-u-sm-7-24,.pure-u-sm-8-24,.pure-u-sm-9-24,.pure-u-sm-10-24,.pure-u-sm-11-24,.pure-u-sm-12-24,.pure-u-sm-13-24,.pure-u-sm-14-24,.pure-u-sm-15-24,.pure-u-sm-16-24,.pure-u-sm-17-24,.pure-u-sm-18-24,.pure-u-sm-19-24,.pure-u-sm-20-24,.pure-u-sm-21-24,.pure-u-sm-22-24,.pure-u-sm-23-24,.pure-u-sm-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-sm-1-24{width:4.1667%;*width:4.1357%}.pure-u-sm-1-12,.pure-u-sm-2-24{width:8.3333%;*width:8.3023%}.pure-u-sm-1-8,.pure-u-sm-3-24{width:12.5%;*width:12.469%}.pure-u-sm-1-6,.pure-u-sm-4-24{width:16.6667%;*width:16.6357%}.pure-u-sm-1-5{width:20%;*width:19.969%}.pure-u-sm-5-24{width:20.8333%;*width:20.8023%}.pure-u-sm-1-4,.pure-u-sm-6-24{width:25%;*width:24.969%}.pure-u-sm-7-24{width:29.1667%;*width:29.1357%}.pure-u-sm-1-3,.pure-u-sm-8-24{width:33.3333%;*width:33.3023%}.pure-u-sm-3-8,.pure-u-sm-9-24{width:37.5%;*width:37.469%}.pure-u-sm-2-5{width:40%;*width:39.969%}.pure-u-sm-5-12,.pure-u-sm-10-24{width:41.6667%;*width:41.6357%}.pure-u-sm-11-24{width:45.8333%;*width:45.8023%}.pure-u-sm-1-2,.pure-u-sm-12-24{width:50%;*width:49.969%}.pure-u-sm-13-24{width:54.1667%;*width:54.1357%}.pure-u-sm-7-12,.pure-u-sm-14-24{width:58.3333%;*width:58.3023%}.pure-u-sm-3-5{width:60%;*width:59.969%}.pure-u-sm-5-8,.pure-u-sm-15-24{width:62.5%;*width:62.469%}.pure-u-sm-2-3,.pure-u-sm-16-24{width:66.6667%;*width:66.6357%}.pure-u-sm-17-24{width:70.8333%;*width:70.8023%}.pure-u-sm-3-4,.pure-u-sm-18-24{width:75%;*width:74.969%}.pure-u-sm-19-24{width:79.1667%;*width:79.1357%}.pure-u-sm-4-5{width:80%;*width:79.969%}.pure-u-sm-5-6,.pure-u-sm-20-24{width:83.3333%;*width:83.3023%}.pure-u-sm-7-8,.pure-u-sm-21-24{width:87.5%;*width:87.469%}.pure-u-sm-11-12,.pure-u-sm-22-24{width:91.6667%;*width:91.6357%}.pure-u-sm-23-24{width:95.8333%;*width:95.8023%}.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-5-5,.pure-u-sm-24-24{width:100%}}@media screen and (min-width:48em){.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-1-2,.pure-u-md-1-3,.pure-u-md-2-3,.pure-u-md-1-4,.pure-u-md-3-4,.pure-u-md-1-5,.pure-u-md-2-5,.pure-u-md-3-5,.pure-u-md-4-5,.pure-u-md-5-5,.pure-u-md-1-6,.pure-u-md-5-6,.pure-u-md-1-8,.pure-u-md-3-8,.pure-u-md-5-8,.pure-u-md-7-8,.pure-u-md-1-12,.pure-u-md-5-12,.pure-u-md-7-12,.pure-u-md-11-12,.pure-u-md-1-24,.pure-u-md-2-24,.pure-u-md-3-24,.pure-u-md-4-24,.pure-u-md-5-24,.pure-u-md-6-24,.pure-u-md-7-24,.pure-u-md-8-24,.pure-u-md-9-24,.pure-u-md-10-24,.pure-u-md-11-24,.pure-u-md-12-24,.pure-u-md-13-24,.pure-u-md-14-24,.pure-u-md-15-24,.pure-u-md-16-24,.pure-u-md-17-24,.pure-u-md-18-24,.pure-u-md-19-24,.pure-u-md-20-24,.pure-u-md-21-24,.pure-u-md-22-24,.pure-u-md-23-24,.pure-u-md-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-md-1-24{width:4.1667%;*width:4.1357%}.pure-u-md-1-12,.pure-u-md-2-24{width:8.3333%;*width:8.3023%}.pure-u-md-1-8,.pure-u-md-3-24{width:12.5%;*width:12.469%}.pure-u-md-1-6,.pure-u-md-4-24{width:16.6667%;*width:16.6357%}.pure-u-md-1-5{width:20%;*width:19.969%}.pure-u-md-5-24{width:20.8333%;*width:20.8023%}.pure-u-md-1-4,.pure-u-md-6-24{width:25%;*width:24.969%}.pure-u-md-7-24{width:29.1667%;*width:29.1357%}.pure-u-md-1-3,.pure-u-md-8-24{width:33.3333%;*width:33.3023%}.pure-u-md-3-8,.pure-u-md-9-24{width:37.5%;*width:37.469%}.pure-u-md-2-5{width:40%;*width:39.969%}.pure-u-md-5-12,.pure-u-md-10-24{width:41.6667%;*width:41.6357%}.pure-u-md-11-24{width:45.8333%;*width:45.8023%}.pure-u-md-1-2,.pure-u-md-12-24{width:50%;*width:49.969%}.pure-u-md-13-24{width:54.1667%;*width:54.1357%}.pure-u-md-7-12,.pure-u-md-14-24{width:58.3333%;*width:58.3023%}.pure-u-md-3-5{width:60%;*width:59.969%}.pure-u-md-5-8,.pure-u-md-15-24{width:62.5%;*width:62.469%}.pure-u-md-2-3,.pure-u-md-16-24{width:66.6667%;*width:66.6357%}.pure-u-md-17-24{width:70.8333%;*width:70.8023%}.pure-u-md-3-4,.pure-u-md-18-24{width:75%;*width:74.969%}.pure-u-md-19-24{width:79.1667%;*width:79.1357%}.pure-u-md-4-5{width:80%;*width:79.969%}.pure-u-md-5-6,.pure-u-md-20-24{width:83.3333%;*width:83.3023%}.pure-u-md-7-8,.pure-u-md-21-24{width:87.5%;*width:87.469%}.pure-u-md-11-12,.pure-u-md-22-24{width:91.6667%;*width:91.6357%}.pure-u-md-23-24{width:95.8333%;*width:95.8023%}.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-5-5,.pure-u-md-24-24{width:100%}}@media screen and (min-width:64em){.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-1-2,.pure-u-lg-1-3,.pure-u-lg-2-3,.pure-u-lg-1-4,.pure-u-lg-3-4,.pure-u-lg-1-5,.pure-u-lg-2-5,.pure-u-lg-3-5,.pure-u-lg-4-5,.pure-u-lg-5-5,.pure-u-lg-1-6,.pure-u-lg-5-6,.pure-u-lg-1-8,.pure-u-lg-3-8,.pure-u-lg-5-8,.pure-u-lg-7-8,.pure-u-lg-1-12,.pure-u-lg-5-12,.pure-u-lg-7-12,.pure-u-lg-11-12,.pure-u-lg-1-24,.pure-u-lg-2-24,.pure-u-lg-3-24,.pure-u-lg-4-24,.pure-u-lg-5-24,.pure-u-lg-6-24,.pure-u-lg-7-24,.pure-u-lg-8-24,.pure-u-lg-9-24,.pure-u-lg-10-24,.pure-u-lg-11-24,.pure-u-lg-12-24,.pure-u-lg-13-24,.pure-u-lg-14-24,.pure-u-lg-15-24,.pure-u-lg-16-24,.pure-u-lg-17-24,.pure-u-lg-18-24,.pure-u-lg-19-24,.pure-u-lg-20-24,.pure-u-lg-21-24,.pure-u-lg-22-24,.pure-u-lg-23-24,.pure-u-lg-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-lg-1-24{width:4.1667%;*width:4.1357%}.pure-u-lg-1-12,.pure-u-lg-2-24{width:8.3333%;*width:8.3023%}.pure-u-lg-1-8,.pure-u-lg-3-24{width:12.5%;*width:12.469%}.pure-u-lg-1-6,.pure-u-lg-4-24{width:16.6667%;*width:16.6357%}.pure-u-lg-1-5{width:20%;*width:19.969%}.pure-u-lg-5-24{width:20.8333%;*width:20.8023%}.pure-u-lg-1-4,.pure-u-lg-6-24{width:25%;*width:24.969%}.pure-u-lg-7-24{width:29.1667%;*width:29.1357%}.pure-u-lg-1-3,.pure-u-lg-8-24{width:33.3333%;*width:33.3023%}.pure-u-lg-3-8,.pure-u-lg-9-24{width:37.5%;*width:37.469%}.pure-u-lg-2-5{width:40%;*width:39.969%}.pure-u-lg-5-12,.pure-u-lg-10-24{width:41.6667%;*width:41.6357%}.pure-u-lg-11-24{width:45.8333%;*width:45.8023%}.pure-u-lg-1-2,.pure-u-lg-12-24{width:50%;*width:49.969%}.pure-u-lg-13-24{width:54.1667%;*width:54.1357%}.pure-u-lg-7-12,.pure-u-lg-14-24{width:58.3333%;*width:58.3023%}.pure-u-lg-3-5{width:60%;*width:59.969%}.pure-u-lg-5-8,.pure-u-lg-15-24{width:62.5%;*width:62.469%}.pure-u-lg-2-3,.pure-u-lg-16-24{width:66.6667%;*width:66.6357%}.pure-u-lg-17-24{width:70.8333%;*width:70.8023%}.pure-u-lg-3-4,.pure-u-lg-18-24{width:75%;*width:74.969%}.pure-u-lg-19-24{width:79.1667%;*width:79.1357%}.pure-u-lg-4-5{width:80%;*width:79.969%}.pure-u-lg-5-6,.pure-u-lg-20-24{width:83.3333%;*width:83.3023%}.pure-u-lg-7-8,.pure-u-lg-21-24{width:87.5%;*width:87.469%}.pure-u-lg-11-12,.pure-u-lg-22-24{width:91.6667%;*width:91.6357%}.pure-u-lg-23-24{width:95.8333%;*width:95.8023%}.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-5-5,.pure-u-lg-24-24{width:100%}}@media screen and (min-width:80em){.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-1-2,.pure-u-xl-1-3,.pure-u-xl-2-3,.pure-u-xl-1-4,.pure-u-xl-3-4,.pure-u-xl-1-5,.pure-u-xl-2-5,.pure-u-xl-3-5,.pure-u-xl-4-5,.pure-u-xl-5-5,.pure-u-xl-1-6,.pure-u-xl-5-6,.pure-u-xl-1-8,.pure-u-xl-3-8,.pure-u-xl-5-8,.pure-u-xl-7-8,.pure-u-xl-1-12,.pure-u-xl-5-12,.pure-u-xl-7-12,.pure-u-xl-11-12,.pure-u-xl-1-24,.pure-u-xl-2-24,.pure-u-xl-3-24,.pure-u-xl-4-24,.pure-u-xl-5-24,.pure-u-xl-6-24,.pure-u-xl-7-24,.pure-u-xl-8-24,.pure-u-xl-9-24,.pure-u-xl-10-24,.pure-u-xl-11-24,.pure-u-xl-12-24,.pure-u-xl-13-24,.pure-u-xl-14-24,.pure-u-xl-15-24,.pure-u-xl-16-24,.pure-u-xl-17-24,.pure-u-xl-18-24,.pure-u-xl-19-24,.pure-u-xl-20-24,.pure-u-xl-21-24,.pure-u-xl-22-24,.pure-u-xl-23-24,.pure-u-xl-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xl-1-24{width:4.1667%;*width:4.1357%}.pure-u-xl-1-12,.pure-u-xl-2-24{width:8.3333%;*width:8.3023%}.pure-u-xl-1-8,.pure-u-xl-3-24{width:12.5%;*width:12.469%}.pure-u-xl-1-6,.pure-u-xl-4-24{width:16.6667%;*width:16.6357%}.pure-u-xl-1-5{width:20%;*width:19.969%}.pure-u-xl-5-24{width:20.8333%;*width:20.8023%}.pure-u-xl-1-4,.pure-u-xl-6-24{width:25%;*width:24.969%}.pure-u-xl-7-24{width:29.1667%;*width:29.1357%}.pure-u-xl-1-3,.pure-u-xl-8-24{width:33.3333%;*width:33.3023%}.pure-u-xl-3-8,.pure-u-xl-9-24{width:37.5%;*width:37.469%}.pure-u-xl-2-5{width:40%;*width:39.969%}.pure-u-xl-5-12,.pure-u-xl-10-24{width:41.6667%;*width:41.6357%}.pure-u-xl-11-24{width:45.8333%;*width:45.8023%}.pure-u-xl-1-2,.pure-u-xl-12-24{width:50%;*width:49.969%}.pure-u-xl-13-24{width:54.1667%;*width:54.1357%}.pure-u-xl-7-12,.pure-u-xl-14-24{width:58.3333%;*width:58.3023%}.pure-u-xl-3-5{width:60%;*width:59.969%}.pure-u-xl-5-8,.pure-u-xl-15-24{width:62.5%;*width:62.469%}.pure-u-xl-2-3,.pure-u-xl-16-24{width:66.6667%;*width:66.6357%}.pure-u-xl-17-24{width:70.8333%;*width:70.8023%}.pure-u-xl-3-4,.pure-u-xl-18-24{width:75%;*width:74.969%}.pure-u-xl-19-24{width:79.1667%;*width:79.1357%}.pure-u-xl-4-5{width:80%;*width:79.969%}.pure-u-xl-5-6,.pure-u-xl-20-24{width:83.3333%;*width:83.3023%}.pure-u-xl-7-8,.pure-u-xl-21-24{width:87.5%;*width:87.469%}.pure-u-xl-11-12,.pure-u-xl-22-24{width:91.6667%;*width:91.6357%}.pure-u-xl-23-24{width:95.8333%;*width:95.8023%}.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-5-5,.pure-u-xl-24-24{width:100%}} \ No newline at end of file diff --git a/static/grids-responsive-min.css.1 b/static/grids-responsive-min.css.1 new file mode 100644 index 0000000..1df05db --- /dev/null +++ b/static/grids-responsive-min.css.1 @@ -0,0 +1,7 @@ +/*! +Pure v0.6.0 +Copyright 2014 Yahoo! Inc. All rights reserved. +Licensed under the BSD License. +https://github.com/yahoo/pure/blob/master/LICENSE.md +*/ +@media screen and (min-width:35.5em){.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-1-2,.pure-u-sm-1-3,.pure-u-sm-2-3,.pure-u-sm-1-4,.pure-u-sm-3-4,.pure-u-sm-1-5,.pure-u-sm-2-5,.pure-u-sm-3-5,.pure-u-sm-4-5,.pure-u-sm-5-5,.pure-u-sm-1-6,.pure-u-sm-5-6,.pure-u-sm-1-8,.pure-u-sm-3-8,.pure-u-sm-5-8,.pure-u-sm-7-8,.pure-u-sm-1-12,.pure-u-sm-5-12,.pure-u-sm-7-12,.pure-u-sm-11-12,.pure-u-sm-1-24,.pure-u-sm-2-24,.pure-u-sm-3-24,.pure-u-sm-4-24,.pure-u-sm-5-24,.pure-u-sm-6-24,.pure-u-sm-7-24,.pure-u-sm-8-24,.pure-u-sm-9-24,.pure-u-sm-10-24,.pure-u-sm-11-24,.pure-u-sm-12-24,.pure-u-sm-13-24,.pure-u-sm-14-24,.pure-u-sm-15-24,.pure-u-sm-16-24,.pure-u-sm-17-24,.pure-u-sm-18-24,.pure-u-sm-19-24,.pure-u-sm-20-24,.pure-u-sm-21-24,.pure-u-sm-22-24,.pure-u-sm-23-24,.pure-u-sm-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-sm-1-24{width:4.1667%;*width:4.1357%}.pure-u-sm-1-12,.pure-u-sm-2-24{width:8.3333%;*width:8.3023%}.pure-u-sm-1-8,.pure-u-sm-3-24{width:12.5%;*width:12.469%}.pure-u-sm-1-6,.pure-u-sm-4-24{width:16.6667%;*width:16.6357%}.pure-u-sm-1-5{width:20%;*width:19.969%}.pure-u-sm-5-24{width:20.8333%;*width:20.8023%}.pure-u-sm-1-4,.pure-u-sm-6-24{width:25%;*width:24.969%}.pure-u-sm-7-24{width:29.1667%;*width:29.1357%}.pure-u-sm-1-3,.pure-u-sm-8-24{width:33.3333%;*width:33.3023%}.pure-u-sm-3-8,.pure-u-sm-9-24{width:37.5%;*width:37.469%}.pure-u-sm-2-5{width:40%;*width:39.969%}.pure-u-sm-5-12,.pure-u-sm-10-24{width:41.6667%;*width:41.6357%}.pure-u-sm-11-24{width:45.8333%;*width:45.8023%}.pure-u-sm-1-2,.pure-u-sm-12-24{width:50%;*width:49.969%}.pure-u-sm-13-24{width:54.1667%;*width:54.1357%}.pure-u-sm-7-12,.pure-u-sm-14-24{width:58.3333%;*width:58.3023%}.pure-u-sm-3-5{width:60%;*width:59.969%}.pure-u-sm-5-8,.pure-u-sm-15-24{width:62.5%;*width:62.469%}.pure-u-sm-2-3,.pure-u-sm-16-24{width:66.6667%;*width:66.6357%}.pure-u-sm-17-24{width:70.8333%;*width:70.8023%}.pure-u-sm-3-4,.pure-u-sm-18-24{width:75%;*width:74.969%}.pure-u-sm-19-24{width:79.1667%;*width:79.1357%}.pure-u-sm-4-5{width:80%;*width:79.969%}.pure-u-sm-5-6,.pure-u-sm-20-24{width:83.3333%;*width:83.3023%}.pure-u-sm-7-8,.pure-u-sm-21-24{width:87.5%;*width:87.469%}.pure-u-sm-11-12,.pure-u-sm-22-24{width:91.6667%;*width:91.6357%}.pure-u-sm-23-24{width:95.8333%;*width:95.8023%}.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-5-5,.pure-u-sm-24-24{width:100%}}@media screen and (min-width:48em){.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-1-2,.pure-u-md-1-3,.pure-u-md-2-3,.pure-u-md-1-4,.pure-u-md-3-4,.pure-u-md-1-5,.pure-u-md-2-5,.pure-u-md-3-5,.pure-u-md-4-5,.pure-u-md-5-5,.pure-u-md-1-6,.pure-u-md-5-6,.pure-u-md-1-8,.pure-u-md-3-8,.pure-u-md-5-8,.pure-u-md-7-8,.pure-u-md-1-12,.pure-u-md-5-12,.pure-u-md-7-12,.pure-u-md-11-12,.pure-u-md-1-24,.pure-u-md-2-24,.pure-u-md-3-24,.pure-u-md-4-24,.pure-u-md-5-24,.pure-u-md-6-24,.pure-u-md-7-24,.pure-u-md-8-24,.pure-u-md-9-24,.pure-u-md-10-24,.pure-u-md-11-24,.pure-u-md-12-24,.pure-u-md-13-24,.pure-u-md-14-24,.pure-u-md-15-24,.pure-u-md-16-24,.pure-u-md-17-24,.pure-u-md-18-24,.pure-u-md-19-24,.pure-u-md-20-24,.pure-u-md-21-24,.pure-u-md-22-24,.pure-u-md-23-24,.pure-u-md-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-md-1-24{width:4.1667%;*width:4.1357%}.pure-u-md-1-12,.pure-u-md-2-24{width:8.3333%;*width:8.3023%}.pure-u-md-1-8,.pure-u-md-3-24{width:12.5%;*width:12.469%}.pure-u-md-1-6,.pure-u-md-4-24{width:16.6667%;*width:16.6357%}.pure-u-md-1-5{width:20%;*width:19.969%}.pure-u-md-5-24{width:20.8333%;*width:20.8023%}.pure-u-md-1-4,.pure-u-md-6-24{width:25%;*width:24.969%}.pure-u-md-7-24{width:29.1667%;*width:29.1357%}.pure-u-md-1-3,.pure-u-md-8-24{width:33.3333%;*width:33.3023%}.pure-u-md-3-8,.pure-u-md-9-24{width:37.5%;*width:37.469%}.pure-u-md-2-5{width:40%;*width:39.969%}.pure-u-md-5-12,.pure-u-md-10-24{width:41.6667%;*width:41.6357%}.pure-u-md-11-24{width:45.8333%;*width:45.8023%}.pure-u-md-1-2,.pure-u-md-12-24{width:50%;*width:49.969%}.pure-u-md-13-24{width:54.1667%;*width:54.1357%}.pure-u-md-7-12,.pure-u-md-14-24{width:58.3333%;*width:58.3023%}.pure-u-md-3-5{width:60%;*width:59.969%}.pure-u-md-5-8,.pure-u-md-15-24{width:62.5%;*width:62.469%}.pure-u-md-2-3,.pure-u-md-16-24{width:66.6667%;*width:66.6357%}.pure-u-md-17-24{width:70.8333%;*width:70.8023%}.pure-u-md-3-4,.pure-u-md-18-24{width:75%;*width:74.969%}.pure-u-md-19-24{width:79.1667%;*width:79.1357%}.pure-u-md-4-5{width:80%;*width:79.969%}.pure-u-md-5-6,.pure-u-md-20-24{width:83.3333%;*width:83.3023%}.pure-u-md-7-8,.pure-u-md-21-24{width:87.5%;*width:87.469%}.pure-u-md-11-12,.pure-u-md-22-24{width:91.6667%;*width:91.6357%}.pure-u-md-23-24{width:95.8333%;*width:95.8023%}.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-5-5,.pure-u-md-24-24{width:100%}}@media screen and (min-width:64em){.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-1-2,.pure-u-lg-1-3,.pure-u-lg-2-3,.pure-u-lg-1-4,.pure-u-lg-3-4,.pure-u-lg-1-5,.pure-u-lg-2-5,.pure-u-lg-3-5,.pure-u-lg-4-5,.pure-u-lg-5-5,.pure-u-lg-1-6,.pure-u-lg-5-6,.pure-u-lg-1-8,.pure-u-lg-3-8,.pure-u-lg-5-8,.pure-u-lg-7-8,.pure-u-lg-1-12,.pure-u-lg-5-12,.pure-u-lg-7-12,.pure-u-lg-11-12,.pure-u-lg-1-24,.pure-u-lg-2-24,.pure-u-lg-3-24,.pure-u-lg-4-24,.pure-u-lg-5-24,.pure-u-lg-6-24,.pure-u-lg-7-24,.pure-u-lg-8-24,.pure-u-lg-9-24,.pure-u-lg-10-24,.pure-u-lg-11-24,.pure-u-lg-12-24,.pure-u-lg-13-24,.pure-u-lg-14-24,.pure-u-lg-15-24,.pure-u-lg-16-24,.pure-u-lg-17-24,.pure-u-lg-18-24,.pure-u-lg-19-24,.pure-u-lg-20-24,.pure-u-lg-21-24,.pure-u-lg-22-24,.pure-u-lg-23-24,.pure-u-lg-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-lg-1-24{width:4.1667%;*width:4.1357%}.pure-u-lg-1-12,.pure-u-lg-2-24{width:8.3333%;*width:8.3023%}.pure-u-lg-1-8,.pure-u-lg-3-24{width:12.5%;*width:12.469%}.pure-u-lg-1-6,.pure-u-lg-4-24{width:16.6667%;*width:16.6357%}.pure-u-lg-1-5{width:20%;*width:19.969%}.pure-u-lg-5-24{width:20.8333%;*width:20.8023%}.pure-u-lg-1-4,.pure-u-lg-6-24{width:25%;*width:24.969%}.pure-u-lg-7-24{width:29.1667%;*width:29.1357%}.pure-u-lg-1-3,.pure-u-lg-8-24{width:33.3333%;*width:33.3023%}.pure-u-lg-3-8,.pure-u-lg-9-24{width:37.5%;*width:37.469%}.pure-u-lg-2-5{width:40%;*width:39.969%}.pure-u-lg-5-12,.pure-u-lg-10-24{width:41.6667%;*width:41.6357%}.pure-u-lg-11-24{width:45.8333%;*width:45.8023%}.pure-u-lg-1-2,.pure-u-lg-12-24{width:50%;*width:49.969%}.pure-u-lg-13-24{width:54.1667%;*width:54.1357%}.pure-u-lg-7-12,.pure-u-lg-14-24{width:58.3333%;*width:58.3023%}.pure-u-lg-3-5{width:60%;*width:59.969%}.pure-u-lg-5-8,.pure-u-lg-15-24{width:62.5%;*width:62.469%}.pure-u-lg-2-3,.pure-u-lg-16-24{width:66.6667%;*width:66.6357%}.pure-u-lg-17-24{width:70.8333%;*width:70.8023%}.pure-u-lg-3-4,.pure-u-lg-18-24{width:75%;*width:74.969%}.pure-u-lg-19-24{width:79.1667%;*width:79.1357%}.pure-u-lg-4-5{width:80%;*width:79.969%}.pure-u-lg-5-6,.pure-u-lg-20-24{width:83.3333%;*width:83.3023%}.pure-u-lg-7-8,.pure-u-lg-21-24{width:87.5%;*width:87.469%}.pure-u-lg-11-12,.pure-u-lg-22-24{width:91.6667%;*width:91.6357%}.pure-u-lg-23-24{width:95.8333%;*width:95.8023%}.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-5-5,.pure-u-lg-24-24{width:100%}}@media screen and (min-width:80em){.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-1-2,.pure-u-xl-1-3,.pure-u-xl-2-3,.pure-u-xl-1-4,.pure-u-xl-3-4,.pure-u-xl-1-5,.pure-u-xl-2-5,.pure-u-xl-3-5,.pure-u-xl-4-5,.pure-u-xl-5-5,.pure-u-xl-1-6,.pure-u-xl-5-6,.pure-u-xl-1-8,.pure-u-xl-3-8,.pure-u-xl-5-8,.pure-u-xl-7-8,.pure-u-xl-1-12,.pure-u-xl-5-12,.pure-u-xl-7-12,.pure-u-xl-11-12,.pure-u-xl-1-24,.pure-u-xl-2-24,.pure-u-xl-3-24,.pure-u-xl-4-24,.pure-u-xl-5-24,.pure-u-xl-6-24,.pure-u-xl-7-24,.pure-u-xl-8-24,.pure-u-xl-9-24,.pure-u-xl-10-24,.pure-u-xl-11-24,.pure-u-xl-12-24,.pure-u-xl-13-24,.pure-u-xl-14-24,.pure-u-xl-15-24,.pure-u-xl-16-24,.pure-u-xl-17-24,.pure-u-xl-18-24,.pure-u-xl-19-24,.pure-u-xl-20-24,.pure-u-xl-21-24,.pure-u-xl-22-24,.pure-u-xl-23-24,.pure-u-xl-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xl-1-24{width:4.1667%;*width:4.1357%}.pure-u-xl-1-12,.pure-u-xl-2-24{width:8.3333%;*width:8.3023%}.pure-u-xl-1-8,.pure-u-xl-3-24{width:12.5%;*width:12.469%}.pure-u-xl-1-6,.pure-u-xl-4-24{width:16.6667%;*width:16.6357%}.pure-u-xl-1-5{width:20%;*width:19.969%}.pure-u-xl-5-24{width:20.8333%;*width:20.8023%}.pure-u-xl-1-4,.pure-u-xl-6-24{width:25%;*width:24.969%}.pure-u-xl-7-24{width:29.1667%;*width:29.1357%}.pure-u-xl-1-3,.pure-u-xl-8-24{width:33.3333%;*width:33.3023%}.pure-u-xl-3-8,.pure-u-xl-9-24{width:37.5%;*width:37.469%}.pure-u-xl-2-5{width:40%;*width:39.969%}.pure-u-xl-5-12,.pure-u-xl-10-24{width:41.6667%;*width:41.6357%}.pure-u-xl-11-24{width:45.8333%;*width:45.8023%}.pure-u-xl-1-2,.pure-u-xl-12-24{width:50%;*width:49.969%}.pure-u-xl-13-24{width:54.1667%;*width:54.1357%}.pure-u-xl-7-12,.pure-u-xl-14-24{width:58.3333%;*width:58.3023%}.pure-u-xl-3-5{width:60%;*width:59.969%}.pure-u-xl-5-8,.pure-u-xl-15-24{width:62.5%;*width:62.469%}.pure-u-xl-2-3,.pure-u-xl-16-24{width:66.6667%;*width:66.6357%}.pure-u-xl-17-24{width:70.8333%;*width:70.8023%}.pure-u-xl-3-4,.pure-u-xl-18-24{width:75%;*width:74.969%}.pure-u-xl-19-24{width:79.1667%;*width:79.1357%}.pure-u-xl-4-5{width:80%;*width:79.969%}.pure-u-xl-5-6,.pure-u-xl-20-24{width:83.3333%;*width:83.3023%}.pure-u-xl-7-8,.pure-u-xl-21-24{width:87.5%;*width:87.469%}.pure-u-xl-11-12,.pure-u-xl-22-24{width:91.6667%;*width:91.6357%}.pure-u-xl-23-24{width:95.8333%;*width:95.8023%}.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-5-5,.pure-u-xl-24-24{width:100%}} \ No newline at end of file diff --git a/static/hsep.png b/static/hsep.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b7c51b9c5b167ba14b3577641e566531bde2cd GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^`+%5{g9%8!?`qBhQrVs^jv*DdO8p)A4k&PFi~mpC z^#A`+Vebo$j$uMMjf+mzJd5&nNw~2jg|YRtkJ+9A6^}b_lg>=7lZpM^ub`v4eaQ#0 zRZ@491YcK$1x&EH(#N}Ao>S<)%Z?Kj>$A*T&TQYj-R|2jzWVx}k4zV4YDxO@5rFev_H nVdP?9X3${-5}ZKDz$DnyzexMo>o{(v2DxO@5rFev_H qVdP?9X3${-5}ZKDz$DVszes!AhB-~A8mpr#3eTS_;Rs@2um%9FtQyw< literal 0 HcmV?d00001 diff --git a/static/jquery-min.js b/static/jquery-min.js new file mode 100644 index 0000000..4c5be4c --- /dev/null +++ b/static/jquery-min.js @@ -0,0 +1,4 @@ +/*! jQuery v3.1.1 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.1.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):C.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/[^\x20\t\r\n\f]+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R), +a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,ka=/^$|\/(?:java|ecma)script/i,la={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};la.optgroup=la.option,la.tbody=la.tfoot=la.colgroup=la.caption=la.thead,la.th=la.td;function ma(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function na(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=ma(l.appendChild(f),"script"),j&&na(g),c){k=0;while(f=g[k++])ka.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var qa=d.documentElement,ra=/^key/,sa=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ta=/^([^.]*)(?:\.(.+)|)/;function ua(){return!0}function va(){return!1}function wa(){try{return d.activeElement}catch(a){}}function xa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)xa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=va;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(qa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,za=/\s*$/g;function Da(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Ea(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Fa(a){var b=Ba.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ga(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Aa.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ia(f,b,c,d)});if(m&&(e=pa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(ma(e,"script"),Ea),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=ma(h),f=ma(a),d=0,e=f.length;d0&&na(g,!i&&ma(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ja(this,a,!0)},remove:function(a){return Ja(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.appendChild(a)}})},prepend:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(ma(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!za.test(a)&&!la[(ja.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function Ya(a,b,c,d,e){return new Ya.prototype.init(a,b,c,d,e)}r.Tween=Ya,Ya.prototype={constructor:Ya,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Ya.propHooks[this.prop];return a&&a.get?a.get(this):Ya.propHooks._default.get(this)},run:function(a){var b,c=Ya.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ya.propHooks._default.set(this),this}},Ya.prototype.init.prototype=Ya.prototype,Ya.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Ya.propHooks.scrollTop=Ya.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Ya.prototype.init,r.fx.step={};var Za,$a,_a=/^(?:toggle|show|hide)$/,ab=/queueHooks$/;function bb(){$a&&(a.requestAnimationFrame(bb),r.fx.tick())}function cb(){return a.setTimeout(function(){Za=void 0}),Za=r.now()}function db(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ba[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function eb(a,b,c){for(var d,e=(hb.tweeners[b]||[]).concat(hb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?ib:void 0)), +void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),ib={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=jb[b]||r.find.attr;jb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=jb[g],jb[g]=e,e=null!=c(a,b,d)?g:null,jb[g]=f),e}});var kb=/^(?:input|select|textarea|button)$/i,lb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):kb.test(a.nodeName)||lb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function mb(a){var b=a.match(K)||[];return b.join(" ")}function nb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,nb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,nb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,nb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=nb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(nb(c))+" ").indexOf(b)>-1)return!0;return!1}});var ob=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(ob,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:mb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ia.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,"$1"),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" + + + + + + +
+
+ Flowers + + +
+
+ + + + + + +
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + +
+ + org2, login2 + + 2016-11-30
+ RABO creditcard, + + 2001-03-17
+ ABN AMRO creditcard, 5422 2300 0373 7907 + + 2001-03-17
+ +
+
+ +
+
+
+ +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + diff --git a/templates/common.html b/templates/common.html new file mode 100644 index 0000000..15dd417 --- /dev/null +++ b/templates/common.html @@ -0,0 +1,75 @@ + + + + + + + + + {% block title %}Flowers{% endblock %} + + + + + + + + + + + + +{% block headandmenu %} + +
+
+ Flowers + + +
+
+ +{% endblock headandmenu %} + + +{% block content %} +{% endblock %} + +
+ + + + + +
+ + + + +{% block footer %} + +{% endblock %} + + + + + diff --git a/templates/create.html b/templates/create.html new file mode 100644 index 0000000..c80f180 --- /dev/null +++ b/templates/create.html @@ -0,0 +1,35 @@ +{% extends "common.html" %} + +{% block headandmenu %} +
+
+ Flowers + +
+
+{% endblock headandmenu %} + +{% block content %} +
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+
+
+ {{ message }} + +
+
+ +{% endblock content %} diff --git a/templates/edit.html b/templates/edit.html new file mode 100644 index 0000000..73ff705 --- /dev/null +++ b/templates/edit.html @@ -0,0 +1,45 @@ +{% extends "common.html" %} + +{% block menuoptions %} +
  • Save
  • +
  • Delete
  • +
  • Cancel
  • +{% endblock menuoptions %} + + +{% block content %} +
    +
    +
    +
    +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + + + +
    + +
    + +
    +
    + + + + +{% endblock %} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..570a9f6 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,37 @@ +{% extends "common.html" %} + +{% block headandmenu %} +
    +
    + Flowers + +
    +
    +{% endblock headandmenu %} + +{% block content %} +
    +
    +
    +
    +
    + +
    + +
    + +
    + +
    + +
    +
    + + + +
    + +
    +
    + +{% endblock content %} diff --git a/templates/list.html b/templates/list.html new file mode 100644 index 0000000..4d6770a --- /dev/null +++ b/templates/list.html @@ -0,0 +1,51 @@ +{% extends "common.html" %} + + +{% block content %} + +
    +
    +
    +
    + +
    +
    + + {% for flower in flowers %} + + + + + {% endfor %} +
    + + {{ flower.organization }}, {{ flower.myID }} + + {{ flower.dateCreated[:10] }}
    + +
    +
    + +
    +
    +
    + +
    + + + +{% endblock content %} diff --git a/templates/rehush.html b/templates/rehush.html new file mode 100644 index 0000000..1a19d2c --- /dev/null +++ b/templates/rehush.html @@ -0,0 +1,40 @@ +{% extends "common.html" %} + +{% block headandmenu %} +
    +
    + Flowers + +
    +
    +{% endblock headandmenu %} + +{% block content %} +
    +
    +
    +
    +
    + +
    + +
    + +
    + +
    + +
    + + +
    + +
    +
    +
    + {{ message }} + +
    +
    + +{% endblock content %} diff --git a/templates/show.html b/templates/show.html new file mode 100644 index 0000000..ab5e970 --- /dev/null +++ b/templates/show.html @@ -0,0 +1,44 @@ +{% extends "common.html" %} + +{% block menuoptions %} +
  • Edit
  • +{% endblock menuoptions %} + + +{% block content %} +
    +
    + + + + + + +
    Org{{ flower.organization }}
    You{{ flower.myName }}
    Login{{ flower.myID }}
    Hash
    {{ flower.mySecret }}
    {{ flower.dateCreated[:10] }}
    + +
    +
    + + + + +{% endblock %} diff --git a/test.py b/test.py new file mode 100644 index 0000000..3533ee4 --- /dev/null +++ b/test.py @@ -0,0 +1,39 @@ +# from flask import Flask +import datetime +import pytz +from Config import * +import sys +import datetime +from FlowerServices import Flower,SuperFlower +from AccessControl import Access +import json +# from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash, json, make_response +# from werkzeug.exceptions import HTTPException + +newuser = 'janine' +newhush = 'demaat196' + +# login db with generic user +#f = SuperFlower(newuser, newhush) +#print(f) +#if f.createNewTable(): + # login as new user +# u = Flower(newuser, newhush) + # add one line +# u.add('Demo organisation', 'Demo name', 'Demo login', 'Demo hush') + +# add 1 pwd +# u = Flower(newuser, newhush) +# # add one line +# u.add('Demo2 organisation', 'Demo name', 'Demo login', 'Demo hush') + + +# read one line +u = Flower(newuser, newhush) +#flower=u.one('webmail catch-all-email@suy.nu', '2023-03-13 20:25:52') +flowers=u.numberOfEntries() +print(flowers) + +#update pwd +#u = Flower(newuser, newhush) +#u.update_pwd('white') diff --git a/test.sql b/test.sql new file mode 100644 index 0000000..212b3cc --- /dev/null +++ b/test.sql @@ -0,0 +1,33 @@ +CREATE TABLE `sjaak` ( + `organization` varchar(50) NOT NULL, + `myID` varchar(50) NOT NULL, + `myName` varchar(50) NOT NULL, + `mySecret` varchar(50) NOT NULL, + `dateCreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `deleted` int(11) DEFAULT '0', + PRIMARY KEY (`organization`,`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + + +MariaDB [Flowers]> create user ignace@localhost identified by 'ignace'; +Query OK, 0 rows affected (0.00 sec) + +MariaDB [Flowers]> grant create,update,insert on Flowers.ignace to ignace@localhost identified by 'ignace'; +ERROR 1044 (42000): Access denied for user 'dude'@'localhost' to database 'mysql' +MariaDB [Flowers]> grant create,update,insert on Flowers.ignace to ignace@localhost; + + + + + +# as root: +create database Flowers; +grant create,select,update,insert,grant option on Flowers.* to flower@localhost identified by '608f0b988db4a96066af7dd8870de96c'; +grant create user,reload on *.* to flower@localhost; +flush privileges; + +create user {0}@localhost identified by '{1}'; +grant select,update,insert on Flowers.{0} to {0}@localhost; +flush privileges; + +delete from ignace where organization in ('myRepository', 'Nero', 'office XP', 'SwisH'); \ No newline at end of file diff --git a/test_fernet.py b/test_fernet.py new file mode 100644 index 0000000..7ebc4c8 --- /dev/null +++ b/test_fernet.py @@ -0,0 +1,29 @@ +from fernet import Fernet + + +# Generate a Fernet key +key = b'XBxB603cX_mULEXxfavOg3FDc0Ox3gChwYEY-Uxd3tE=' +pwd = 'black' + +key = bytes((pwd*10)[:43]+"=", "ascii") + +print(key) + +# Create a Fernet object with that key +f = Fernet(key) + +# Input string to be encrypted +input_string = "Hello World!Hello World!Hello World!Hello World!Hello World!" + +# Encrypt the string +encrypted_string = f.encrypt(input_string.encode()).decode() +print(encrypted_string) + + +# Decrypt the encrypted string +decrypted_string = f.decrypt(encrypted_string.encode()).decode() + +# Print the original and decrypted strings +print("Original String:", input_string) +print("Decrypted String:", decrypted_string) +